在今天处理我的数据结构任务时,我遇到了一些我必须解决的错误,这些错误对我来说非常新。例如,以下内容:
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
};
这在视觉工作室中完全没问题,但是在g ++中没有。我不得不将nullptr更改为0,即使visual studio希望我使用nullptr!
使用学校编译器的另一个事件给了我以下信息:
warning: extended initializer lists only available with -std=c++0x
很自然地,我继续把它添加到我的makefile中。
这让我想知道,鉴于我将来会编写更复杂的程序,我多久会看到编译器中的简单差异导致的错误? visual studio不能向后兼容旧版编译器吗?我可以更改设置吗?在使用各种编译器时,只需要了解我应该注意的事项的一般知识。
答案 0 :(得分:3)
g++
将在C ++ 03模式下编译,这是C ++ 11之前的C ++标准。要告诉g++
您的代码实际上是C ++ 11代码,您必须使用-std=c++11
编译器开关。例如:
g++ -std=c++11 -o test test.cc