Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C和x2B之间的差异+;编译程序_C++_Visual Studio 2013_Compilation - Fatal编程技术网

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)或任何其他指针类型