草庐IT

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,但是建议使用

c++ - g++ 创建一个 const 的几个符号?

在我更改的一个头文件(C++)中#defineTIMEOUT10更多(?)C++方式:constintTIMEOUT=10;不过,似乎g++(v4.4.3)现在在二进制文件中多次包含此符号。$nm-Cbuild/ipd/ipd|head08050420TToUnixTime08050470TParseTime080504c0TParseISOTime080518e4rTIMEOUT080518ecrTIMEOUT080518f4rTIMEOUT080518fcrTIMEOUT080503e0THandleMessage怎么会? 最佳答案

c++ - g++ 编译存在于另一个目录中的源文件

我正在尝试使用makefile为我正在开发的C++插件设置构建过程。我很想知道是否有任何方法可以让g++编译在另一个目录中找到的source文件。我这样做的动机是避免为每个源文件指定相对路径,正如我在下面解释的那样。我的项目目录结构如下:MyPlugin-->src-->Foo.cpp-->Foo.h-->Bar.cpp-->Bar.cpp-->build-->Makefile以下是我当前Makefile的精简版本:SRC_PATH=../srcOUT_PATH=../binVPATH=${SRC_PATH}FILES=Foo.cppBar.cppCC=g++CFLAGS=-Wall-

c++ - 可以在 g++ 4.7+ 中重新启用 `uint` 类型吗?

我有大量代码正试图从g++版本4.2.2转换为4.7.2。在4.2.2及之前的版本中,uint似乎被定义为unsignedint。我知道这不是标准的C++东西,真正的人写ISO标准C++,但我想知道是否有标志或某种方式让g++在不修改所有源文件的情况下接受uint.我可以更改CPPFLAGS或向g++运行线添加一个开关吗?我的谷歌一无所获。我有一些来自不同工作组的源文件,我想接​​受他们的uint违规行为。例如#include#include#includeusingnamespacestd;intmain(void){uintfoo=0xdeadbeef;cout产量:/tmp/rb

.tmux.conf文件中的set -g,set -ga和set -option -g之间有什么区别?

我是TMUX的新手,并试图了解其配置。我首先要查看一些预先存在的.tmux.conf文件以及我能找到的任何文档,但它仍然让我想知道标志。到目前为止,我已经看过以下内容:来自tmux上的Archwiki条目set-gprefixC-aset-gaterminal-overrides",xterm-termite:Tc"set-option-gxterm-keyson和一条线.tmux.conf文件set-window-option-g标志是什么意思,当一个标志一个标志比另一个标志更优选时,是否有任何特殊情况?看答案set是别名set-option.set-g用于设置全局选项和-ga将值附加到现有