如果编译器符合Cpp0x,那么#defined是什么?

时间:2009-11-06 09:06:02

标签: c++ c++11

当编译器符合Cpp0x时,是否有官方或非官方的#defines? 更好的是,对于特定的Cpp0x功能(〜#cpp0xlambda,#cpp0xrvalue等)?

(网上没有发现任何相关内容)

3 个答案:

答案 0 :(得分:14)

对于C ++ 03,根据16.8 / 1(预定义的宏名称):

  

编译C ++翻译单元时,名称__cplusplus被定义为值199711L。

根据16.8 / 1(预定义宏名称)的C ++ 0x draft n2857:

  

编译C ++翻译单元时,名称__cplusplus定义为值[tbd]。

答案 1 :(得分:9)

Bjarne's C++0x FAQ说:

  

__cplusplus

     

在C ++ 0x中,宏__cplusplus将被设置为与当前199711L不同(大于)的值。

答案 2 :(得分:2)

官方规范包含__cplusplus预处理器宏的值,但正如其他人指出的那样,这表明规范中的所有都已实现。更重要的是,没有当前的编译器(我知道)设置适当的值。规格很好,但任何规格的完全未实现的位应该被认为是暂定的;规范与广泛支持的交集是真正的“标准”。

一个相关的问题是“我怎么能判断是否至少启用了某些C ++ 0x支持?”,例如使用-std=c++0x编译器开关。该问题的答案是特定于编译器并且可能会发生变化,但是当它们的部分C ++ 0x支持是时,GCC 4.6和Clang 2.1都设置了预处理器宏__GXX_EXPERIMENTAL_CXX0X__(并赋予它值1)。启用。