20

最近我在编写的 c++ 代码中遇到了编译错误,所以有人问我是否使用了 C++11 编译器,但老实说,我不知道如何检查我的编译器版本!所以知道如何解决这个问题吗?

顺便说一句,我使用代码块作为 IDE,其中包括来自 MinGW 的 GCC 编译器和 GDB 调试器。另外,如果我在 Linux 下编译我的 c++ 代码,我应该运行什么命令来了解我的编译器版本?

4

3 回答 3

24

这可能是一个棘手的问题。C++11 指的是标准的一个版本,而不是编译器的一个版本。不同的编译器和任何给定编译器的不同版本通常会实现标准的混合版本,至少对于最近的版本是这样。或多或少,因为 C++11 的任何实现都是相当新的,因此可能相当有问题。

大多数编译器都有输出版本的选项;许多人会以详细模式系统地输出它。对于 g++,请尝试g++ --version. 最新版本的 g++ 确实对 C++11 有一些支持,但您必须使用-std=c++0x(而不是通常的-std=c++03or -std=c++98)来激活它。正如名称 ( c++0x, 而不是c++11) 所示,它不是真正的 C++11;它是一些(大多数?)主要新功能的实现,在基于各种工作文件的初步版本中,而不是最终标准。

(FWIW:我认为没有任何编译器完全实现了所有 C++11,但我很想被证明是错误的。)

于 2012-04-05T09:46:01.623 回答
14

你可以像这样找到你的编译器版本:

g++ --version

这并不能告诉您是否使用的是 c++11。要使用 c++11 功能,您必须使用 thr-std=c++0x标志调用编译器:

g++ -std=c++0x ....

请记住,gcc 还没有实现 100% 的 c++11,它实现的程度取决于版本。有关支持的功能表,请参见此处。

编辑:严格来说,如果您使用的是 GCC,由于缺少功能,您不能使用完全兼容的 c++11 编译器。但是 4.6.1 及以后的版本涵盖了大量的标准。

于 2012-04-05T09:38:02.693 回答
6

如果您使用的是 linux,则检查版本很容易。

> gcc --version

会告诉你你拥有的版本。请注意,GCC C++11 支持仍然不完整,您可以在此处找到详细信息:http: //gcc.gnu.org/projects/cxx0x.html

我自己使用了一些 C++11 特性,即初始化列表和nullptr常量。我正在使用 GCC 4.6,它工作正常。

编辑:是的,正如@jaunchopanza 所说,您需要-std=c++0x编译器标志才能使其工作。如果您使用的是 Code::Blocks,只需右键单击您的项目,选择Build options...,然后选中Have g++ follow thecoming C++0x ISO C++ language standard [-std=c+ +0x]

于 2012-04-05T09:38:55.760 回答