jjzjj

c++ - 为什么这个显式转换运算符适用于 g++ 而不是 Visual Studio 2013?

以下示例包含两个模板化类来表示度数和弧度,并在它们之间转换一个显式转换运算符。它使用g++(ideonelink)编译和运行,但不使用VisualStudio2013和VisualC++CompilerNov2013CTP(CTP_Nov2013)作为平台工具集。#includestaticconstdoublePI=3.14159265358979323846;//Forwarddeclarationstemplateclassradians;templateclassdegrees;templateclassdegrees{public:degrees(constTvalue):v

c++ - 没有优化的 g++ 4.9 上静态 constexpr 的 undefined reference

我有以下代码:#include#includeusingnamespacestd::chrono_literals;#defineMSG"hello"#defineDUR1000msclassmwe{public:staticconstexprautomsg=MSG;staticconstexprautodur_1=DUR;staticconstexprstd::chrono::millisecondsdur_2=DUR;staticconststd::chrono::millisecondsdur_3;staticconstexprdecltype(DUR)dur_4=DUR;};c

c++ - 为什么 clang++ 和 gcc/g++ 生成不同链接的可执行文件

当使用g++和clang++进行编译和链接时,期望生成的可执行文件的链接与它们的链接相同。然而,在某些情况下,尽管传入的参数相同,但clang++可执行文件似乎链接到比g++更多的库。这会导致功能差异,尤其是对于在加载和卸载时自动执行的动态链接库。为什么会这样? 最佳答案 事实证明,gcc在ubuntu--as-needed中默认启用了一项功能,这会导致gcc有效地忽略任何在链接项链中未引用其符号的库这可以在gcc中使用--no-as-needed标志禁用。或者,您可以发出-Wl,--as-needed作为clang++的第一个选项

c++ - 为什么 g++ 链接器不警告这个不一致的函数声明?

这是在使用g++4.4和g++4.7的Debiansqueeze上测试的。考虑两个C++源文件。################foo.cc##################includeusingstd::string;intfoo(void){return0;}#################bar.cc##################includeusingstd::string;//intfoo(void);stringfoo(void);intmain(void){foo();return0;}##################如果我编译并运行它,可以预见会出现问题

C++ 代码在 g++ 和 vs2008 中得到不同的结果

#include#include#includeusingnamespacestd;structExmpl{Exmpl(){coutevec(3);deletep;return0;}在g++(4.4.3)中编译时我得到了Exmpl()Exmpl(constExmpl&)~Exmpl()Exmpl()operator=(constExmpl&)~Exmpl()Exmpl()Exmpl()Exmpl(constExmpl&)Exmpl(constExmpl&)Exmpl(constExmpl&)~Exmpl()~Exmpl()~Exmpl()~Exmpl()~Exmpl()~Exmpl()

c++ - C++ 中 f(g(), h()) 的求值顺序

这是CouldaC++implementation,intheory,parallelisetheevaluationoftwofunctionarguments?的后续行动假设我有以下C++11程序:#includeusingstd::printf;intg(){printf("1\n");printf("3\n");return2;}inth(){printf("2\n");printf("4\n");return3;}voidf(inta,intb){printf("%i\n",a+b);}intmain(){f(g(),h());}当然可以观察到以下输出:13245241351

c++ - g++ 可变大小数组没有警告?

inta;cin>>a;intints[a];为什么这在编译时不抛出任何类型的警告?我怎么知道这个数组什么时候实际使用堆或堆栈?g++-std=c++11-Wall*.cpp-omain 最佳答案 ISOC++不允许使用可变长度数组,g++很高兴地告诉你,如果你通过传递-pedantic来增加它的严格性旗帜。使用-pedantic将对违反标准的事情发出警告。如果你想要g++发出错误并因此拒绝编译;使用-pedantic-errors.g++-Wall-pedantic-std=c++11apa.cppapa.cpp:Infuncti

c++ - 由于在 32 位的 G++ 4.4.7 20120313 中使用 C++ std::vector 中的内联函数导致精度发生变化

我正在centos5.932位(在64位机器上运行)上编译,目标是32位。g++版本为4.4.7,这不是centos5.9上默认提供的版本,但可以使用yum下载并作为发行版的一部分提供。我有一个非常简单的循环如下std::vectorresult(n);std::vectorvalues(n);//hereIcomputevalues().TheyarecorrectandIextensivelynoted//thatthere'snothingwrongthere.Theproblemishereresult[0]=0.0;for(inti=0;i在此代码的更复杂版本中(它显示了完全

c++ - 一个 "hack"来获取 float 模板参数工作编译但在 g++ 和 clang 上出现段错误

我知道whyIcan'tusefloatastemplateparameter以及如何设置模板类的staticconstfloat成员,这要归功于一对分子/分母。但我正在尝试另一个基于reinterpret_cast的“hack”,以从其IEEE754十六进制书写中“emule”float模板参数。这是一小段代码:#include#includetemplatestructMyStruct{staticconstfloatvalue;};templateconstfloatMyStruct::value=*reinterpret_cast(T);intmain(){typedefMyS

c++ - g++ 警告标志以避免 bool 到 double 转换

我寻找g++的警告编译标志,它会阻止从bool到double的静默转换。Thisanswer涉及将int转换为double的更广泛问题。这个问题在那里被驳回了,因为它被认为是无损转换并且完全合法。但是,由于bool具有不同于简单整数的另一种语义含义,我希望从bool到double的隐式转换会发出警告。我试过:-Wall-Wextra-pedantic-Wconversion在以下代码上没有任何成功(没有发出警告):#includeintfoo(doublevar){returnstatic_cast(var);}intmain(){std::cout我使用g++4.9.2,但是建议使用