我目前使用的是什么 C++ 规范?
what c++ norme i'm currently using?
最近我在编写的c++代码中遇到编译错误,所以有人问我是否使用c++11编译器,但老实说,我不知道如何检查我的编译器版本!你知道怎么弄清楚吗??
顺便说一句,我使用代码块作为IDE,其中包括来自MinGW的GCC编译器和GDB调试器。如果我在Linux下编译c++代码,我应该运行什么命令来了解我的编译器版本?
这可能是一个棘手的问题。C++11指的是标准,而不是编译器的某个版本。不同的编译器,以及任何给定编译器的不同版本,通常都会实现混合标准版本的,至少对于最新版本。更多或更少,因为C++11的任何实现都将是相当新的,因此可能相当麻烦。
大多数编译器都有输出版本的选项;许多人会输出它系统地处于详细模式。对于g++,请尝试g++ --version
。最近的g++版本确实支持C++11,但您必须激活它与CCD_ 2(而不是通常的CCD_-std=c++98
)。正如名称(c++0x
,而不是c++11
)所示是而不是真正的C++11;它是主要新功能,基于各种工作的初步版本论文,而不是最终标准。
(FWIW:我不认为任何编译器能完全实现C++11的所有功能,但我认为喜欢被证明是错的。)
您可以找到这样的编译器版本:
g++ --version
这并不能告诉你是否在使用c++11。要使用c++11特性,您必须使用thr -std=c++0x
标志调用编译器:
g++ -std=c++0x ....
请记住,gcc还没有实现c++11的100%,它实现的程度取决于版本。请参阅此处以获取支持的功能表。
EDIT:严格来说,如果您使用GCC,则由于缺少功能,您无法使用完全兼容的c++11编译器。但是4.6.1以后的版本涵盖了大量的标准。
如果您在linux中,检查版本很容易。
> gcc --version
会告诉你你的版本。请注意,GCC C++11支持仍然不完整,您可以在这里找到详细信息:http://gcc.gnu.org/projects/cxx0x.html
我自己使用了一些C++11特性,即初始值设定项列表和nullptr
常量。我正在使用GCC 4.6,它运行良好。
edit:是的,正如@jaunchopanza所说,您需要-std=c++0x
编译器标志才能使其工作。如果您使用代码::块,只需右键单击您的项目,选择构建选项,并检查上面写着让g++遵循即将到来的C++0x ISO C++语言标准[-std=C++0x]
- 提升精神:解析布尔表达式并简化为规范范式
- 在noexcept 规范中是否允许使用"this"?
- 模板规范获取'Ambiguous call to overloaded function'
- 哪个C++规范开始支持 std::vector
- C++部分概念 id:显式模板规范顺序/第一个参数的特殊状态的原因是什么?
- C++中"覆盖功能的异常规范比基本版本更宽松"的奇怪错误
- 了解标准::矢量规范
- 运算符+ 的规范实现涉及额外的移动构造函数
- std::complex<> in C++ 数学特殊函数:技术规范或提案
- C++规范是否特别对待标准 t 库?
- 结构时间规范可以重复使用纳米睡眠吗?
- 矢量类型规范中的星号用于什么?
- 了解 printf 格式规范中的 %03.3u
- 将模板(没有规范)传递给 std::thread() 会出现错误:<未解析的重载函数类型>匹配错误
- 过载功能使用规范
- 给定概念,SFINAE 帮助程序是否仍在规范中作为未弃用?
- 将结构时间规范添加到类(似乎没有其他类型的)会导致EXEC_BAD_ACCESS
- 当接收到不明确的规范时,表示图的邻接列表的数据结构
- iostream运算符重载的C++异常规范
- 为什么旧的空抛规范被用新的语法"noexcept"重写?