[英]Differences between C++ compilers
在今天进行数据结构分配工作时,我遇到了一些我必须解决的错误,这些错误对我来说是很新的。 例如,以下内容:
struct Node
{
// data and stuff
Node(const T& d = T{}, Node * const p = nullptr,
Node * const n = nullptr, unsigned int f = 0)
: data(d), prev(p), next(n), freq(f) {}
// other stuff
};
这在Visual Studio中运行得很好,但是在g ++中却没有。 即使Visual Studio希望我使用nullptr,我也必须将nullptr更改为0!
使用学校的编译器发生的另一起事件给我以下消息:
warning: extended initializer lists only available with -std=c++0x
所以自然地,我继续将其添加到我的makefile中。
这让我想知道,鉴于将来我将编写更复杂的程序,我会经常看到错误是由于编译器之间的简单差异而导致的? Visual Studio是否不与较早的编译器向后兼容? 我可以更改设置吗? 只是寻找关于事物的一般知识,在使用各种编译器时,我应该知道这些知识。
默认情况下, g++
将以C ++ 03模式编译,这是C ++ 11之前的C ++标准。 要告诉g++
您的代码实际上是C ++ 11代码,您必须使用-std=c++11
编译器开关。 例如:
g++ -std=c++11 -o test test.cc
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.