C++ C和x2B之间的差异+;编译程序
今天在完成数据结构作业时,我遇到了一些我必须解决的错误,这些错误对我来说是非常新的。例如,以下各项:C++ C和x2B之间的差异+;编译程序,c++,visual-studio-2013,compilation,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 s
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
};
这在VisualStudio中运行得非常好,但在g++中却不行。我必须将nullptr更改为0,尽管VisualStudio希望我使用nullptr
另一次使用学校编译器的事件给了我以下信息:
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
默认情况下,代码> G++> /Cult>将以C++ 03模式编译,这是C++ 11之前的C++标准。要告诉
g++
您的代码实际上是C++11代码,您必须使用-std=C++11
编译器开关。例如:
g++ -std=c++11 -o test test.cc
默认情况下,代码> G++> /Cult>将以C++ 03模式编译,这是C++ 11之前的C++标准。要告诉
g++
您的代码实际上是C++11代码,您必须使用-std=C++11
编译器开关。例如:
g++ -std=c++11 -o test test.cc
默认情况下,代码> G++> /Cult>将以C++ 03模式编译,这是C++ 11之前的C++标准。要告诉
g++
您的代码实际上是C++11代码,您必须使用-std=C++11
编译器开关。例如:
g++ -std=c++11 -o test test.cc
您应该通过添加
-std=c++11
开关来告诉g++您正在构建c++11代码。默认情况下,g++将在C++03模式下编译(我认为)。nullptr
是C++11的东西,默认情况下,gcc不会在C++11中编译,而较新版本的VS则会。“我多久会看到由于编译器之间的简单差异而导致的错误?”-如果你不知道任何关于C++标准版本和配置编译器之间的差异的话,那么通常是这样。除此之外,不经常。“visual studio与较旧的编译器不向后兼容吗?”-这根本没有意义。@JonasWielicki或者,他可以避免使用C++11构造。VS将接受NULL
而不是NULL ptr
,并接受T()
而不是T{}
。因为他说的是“学校”,我怀疑他的教授会想亲自编译结果,而不会在编译时使用-std=c++11
选项。(遗憾的是,我不知道如何让VS对新功能发出警告。但他总是可以在他的PC上安装g++并使用它。)而且你可以把指针看作整数。任何可转换为int
的内容都可以分配给指针nullptr
只是一个表示空指针(类型为nullptr_t)的新关键字,可以强制转换为bool(为false)、int(为0)或任何其他指针类型(int*、Node*等)。您应该通过添加-std=c++11
开关告诉g++您正在构建c++11代码。默认情况下,g++将在C++03模式下编译(我认为)。nullptr
是C++11的东西,默认情况下,gcc不会在C++11中编译,而较新版本的VS则会。“我多久会看到由于编译器之间的简单差异而导致的错误?”-如果你不知道任何关于C++标准版本和配置编译器之间的差异的话,那么通常是这样。除此之外,不经常。“visual studio与较旧的编译器不向后兼容吗?”-这根本没有意义。@JonasWielicki或者,他可以避免使用C++11构造。VS将接受NULL
而不是NULL ptr
,并接受T()
而不是T{}
。因为他说的是“学校”,我怀疑他的教授会想亲自编译结果,而不会在编译时使用-std=c++11
选项。(遗憾的是,我不知道如何让VS对新功能发出警告。但他总是可以在他的PC上安装g++并使用它。)而且你可以把指针看作整数。任何可转换为int
的内容都可以分配给指针nullptr
只是一个表示空指针(类型为nullptr_t)的新关键字,可以强制转换为bool(为false)、int(为0)或任何其他指针类型(int*、Node*等)。您应该通过添加-std=c++11
开关告诉g++您正在构建c++11代码。默认情况下,g++将在C++03模式下编译(我认为)。nullptr
是C++11的东西,默认情况下,gcc不会在C++11中编译,而较新版本的VS则会。“我多久会看到由于编译器之间的简单差异而导致的错误?”-如果你不知道任何关于C++标准版本和配置编译器之间的差异的话,那么通常是这样。除此之外,不经常。“visual studio与较旧的编译器不向后兼容吗?”-这根本没有意义。@JonasWielicki或者,他可以避免使用C++11构造。VS将接受NULL
而不是NULL ptr
,并接受T()
而不是T{}
。因为他说的是“学校”,我怀疑他的教授会想亲自编译结果,而不会在编译时使用-std=c++11
选项。(遗憾的是,我不知道如何让VS对新功能发出警告。但他总是可以在他的PC上安装g++并使用它。)而且你可以把指针看作整数。任何可转换为int
的内容都可以分配给指针nullptr
只是一个表示空指针(类型为nullptr_t)的新关键字,可以强制转换为bool(为false)、int(为0)或任何其他指针类型