草庐IT

static-compilation

全部标签

c++ - 用于遍历继承层次结构的 Static_cast 与 dynamic_cast

我看到一本关于C++的书提到使用静态转换在继承层次结构中导航比使用动态转换更有效。例子:#include#includeusingnamespacestd;classShape{public:virtual~Shape(){};};classCircle:publicShape{};classSquare:publicShape{};classOther{};intmain(){Circlec;Shape*s=&c;//Upcast:normalandOK//Moreexplicitbutunnecessary:s=static_cast(&c);//(Sinceupcastingis

c++ - 不寻常的 static_cast 语法

我设法追踪到以下表达式的错误:foo(static_cast(a,b));//Executesspecialisation1右括号位置错误。正确的说法应该是:foo(static_cast(a),b);//Executesspecialisation2我从未见过static_cast与形式(a,b)一起使用,也从未在任何地方见过它的描述。这是什么意思?前面的语句返回b。 最佳答案 static_cast不是一个函数,它是一个关键字,所以a,b中的逗号不是参数分隔符;它是commaoperator.它评估a但丢弃结果。表达式的计算结果

c++ - 为什么 static_cast 在逻辑上应该出于安全目的拒绝它们或者 static_cast 与安全无关时允许向下转换?

在下面的示例中,编译器接受static_cast向下转换,导致未定义的行为,而我认为static_cast完全是为了安全(C风格转换无法提供).#includeclassBase{public:intx=10;};classDerived1:publicBase{public:inty=20;};classDerived2:publicBase{public:intz=30;intw=40;};intmain(){Derived1d1;Base*bp1=static_cast(&d1);Derived2*dp1=static_cast(bp1);std::coutzw

c++ - 为什么这个 static_cast 是不允许的?

我有一个A类对象,我想将其分配到自定义堆栈对象上。为此,我只需将堆栈指针移动与对象大小相同的字节数并返回其先前的值:classA:publicB{};//Bisfromaprecompiledlibraryclassstack{public:stack(void):_top(&_storage[0]){}templateinlineT*push(void){T*ptr=static_cast(_top);_top+=sizeof(T);returnptr;}//...private:char_storage[1024];char*_top;};stack_stack;intmain(i

c++ - 在 C++ 中声明 "static"变量时, "global"到底是什么意思?

这是对previousquestionofmine范围的扩展.“static”到底是什么,如何使用,在处理C++时使用“static”的目的是什么?谢谢。 最佳答案 这意味着该变量是翻译单元的本地变量(简单地说,是单个源文件),无法从外部访问。static的这种使用实际上在当前的C++标准中已被弃用-相反,您应该使用匿名namespace:staticintx=0;应该是:namespace{intx=0;} 关于c++-在C++中声明"static"变量时,"global"到底是什么意

Python 扩展 : using different compiler flags for a C parts and C++ parts

对于我的python扩展,我有C(来自嵌入式库)和C++文件,它们被编译并链接在一起。只有C++部分与Python接口(interface)(通过SWIG)。这在VS2015的windows和linux下的gcc中都有效。但是,对于gcc,C++文件需要一组不同于C文件的编译器标志(例如-std=c++11、-Wno-reorder),以避免出现有关C中不正确标志的警告。在setuptools/distutils中有没有办法单独更改每个文件的编译器标志,例如。基于文件扩展名?我已经使用了来自https://stackoverflow.com/a/36293331/3032680的自定义

c++ - g++ : Is there a way to access compile flags inside the code that is being compiled?

有没有一种方法(例如,定义的常量)来访问正在编译的代码中运行编译器的编译标志。例如,我想要一个程序来写入编译时使用的标志。intmain(){std::coutgcc/g++是否存在这样的常量?或者更好:是否有在gcc和clang中都定义的常量?我对检查优化级别和-march标志的值特别感兴趣。那么,如果没有显示所有标志的常量,是否至少有显示这些值的常量? 最佳答案 以下命令打印出所有预定义的宏:g++-dM-E-这适用于gcc和g++。您可以自行检查-不幸的是,没有宏可让您轻松访问完整的gcc/g++命令行。幸运的是,大多数-m.

C++ fatal error C1001 : An internal error has occurred in the compiler

在Release模式下编译时出现以下错误。1>d:\users\eyal\projects\code\yalla\core\src\runbox\win32\window.cpp:fatalerrorC1001:Aninternalerrorhasoccurredinthecompiler.1>(compilerfile'f:\dd\vctools\compiler\utc\src\p2\main.c',line249)1>Toworkaroundthisproblem,trysimplifyingorchangingtheprogramnearthelocationslistedab

C++17 static 和 constexpr

我正在使用与Xcode9.3捆绑在一起的clang,我试图了解以下结果是否是C++17更改的有意部分:#includetemplatestructTest{staticconstintTEN;};templateconstexprintTest::TEN=10;intmain(intargc,constchar*argv[]){std::cout::TEN当使用c++11或c++14编译时,这将打印“10”。但是,使用c++17编译它时,会打印“0”。这是怎么回事? 最佳答案 在别处发布后,一位clang开发人员承认这是clang-

c++ - CMake 识别 MSVC(C 和 CXX),但仍然抛出 'No CMAKE_*_COMPILER found'

我一直在四处寻找,这个问题似乎以各种形式出现了很多。最常见的原因是缺少编译器,即C和CXX编译器未知。然而,就我而言,情况并非如此。我的机器上有C和C++编译器,例如通过VisualStudio,一切都可以正常编译。但是,通过cmake,会发生这种情况:>cmake.输出:--Buildingfor:VisualStudio142015--TheCcompileridentificationisMSVC19.0.24215.1--TheCXXcompileridentificationisMSVC19.0.24215.1CMakeErroratCMakeLists.txt:12(pro