我目前使用的是什么c++规范? [重复]

问题描述 投票:0回答:3

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

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

c++ linux c++11
3个回答
26
投票

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

大多数编译器都有输出版本的选项;许多人会输出它 系统地以详细模式进行。 对于 g++,请尝试

g++ --version
。 最近的 g++ 版本确实对 C++11 有一些支持,但您必须激活 与
-std=c++0x
(而不是通常的
-std=c++03
-std=c++98
)。 正如名称(
c++0x
,而不是
c++11
)所示,它 不是真正的C++11;它是一些(大多数?)的实现 主要新功能,基于各种工作的初步版本 论文,而不是最终标准。

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


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 及以后的版本涵盖了该标准的大部分内容。


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]

© www.soinside.com 2019 - 2024. All rights reserved.