C ++编译器之间的差异

时间:2014-10-16 18:35:11

标签: c++ visual-studio-2013 compilation

在今天处理我的数据结构任务时,我遇到了一些我必须解决的错误,这些错误对我来说非常新。例如,以下内容:

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不能向后兼容旧版编译器吗?我可以更改设置吗?在使用各种编译器时,只需要了解我应该注意的事项的一般知识。

1 个答案:

答案 0 :(得分:3)

默认情况下,

g++将在C ++ 03模式下编译,这是C ++ 11之前的C ++标准。要告诉g++您的代码实际上是C ++ 11代码,您必须使用-std=c++11编译器开关。例如:

g++ -std=c++11 -o test test.cc