今天我在处理数据结构的任务时遇到了一些我必须解决的错误,这些错误对我来说都是非常新的。例如,以下内容:C++编译器之间的差异
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是否不能与旧版编译器兼容?我可以更改设置吗?只是寻找关于使用各种编译器时应该注意的事情的一般知识。
您应该通过添加'-std = C++ 11''开关告诉g ++您正在构建C++ 11代码。 g ++将默认编译(我认为)在C++ 03模式下。 – 2014-10-16 18:37:35
'nullptr'是一个C++ 11的东西,默认情况下,gcc不会在C++ 11中编译,而VS的新版本可以。 – juanchopanza 2014-10-16 18:37:55
“我多久会看到编译器中简单差异导致的错误” - 如果您不了解C++标准版本和配置编译器之间的区别,那么经常会这样。否则,并不经常。 “Visual Studio是不是与旧版编译器兼容?” - 这甚至没有意义。 – 2014-10-16 18:39:49