c ++ 14中是否有__cplusplus的标准定义?

时间:2014-09-28 20:28:50

标签: c++ c++14

我希望设置一些预处理程序的东西,而且我想要一个更准确的数字来定义C ++ 14中的__cplusplus。是否有一个标准强制要求?

2 个答案:

答案 0 :(得分:43)

N3936 * §16.8[cpp.predefined] / p1:

  

1以下宏名称应由实现定义:

     

__cplusplus

     

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

N3936是最终的工作草案,成为C ++ 14,数字201402L与发送C ++ 14标准进行最终投票的会议一致(February 2014

* 有兴趣获取C ++标准副本的人应该查看Where do I find the current C or C++ standard documents?

答案 1 :(得分:1)

cppreference在“ Predefined macros”部分中提供了有关__cplusplus宏的标准值的信息。当前的标准值为:

199711L(C ++ 98或C ++ 03)
201103L(C ++ 11)
201402L(C ++ 14)
201703L(C ++ 17)

仅供参考,在最终标准发布之前,任何给定版本的宏的值都无法确定。因此,截至2019年6月,尚无办法知道C ++ 2a的宏值是什么。

图书馆供应商通常会在#if __cplusplus > 201703L上使用其“ C ++ 2a”功能。

使用“ C ++ 2a”模式的编译器供应商只需选择__cplusplus的任意值即可使库供应商的__cplusplus > 201703L检查愉快:

GCC(8.x,9.x和中继)-std=c++2a模式设置__cplusplus == 201709L
lang语(5.x,6.x,7.x,8.x和主干)-std=c++2a模式设置__cplusplus == 201707L
令人困惑的是,即使在__cplusplus == 199711L模式下,Microsoft Visual Studio也总是设置/std:c++17unless you enable /Zc:__cplusplus.,所以要当心!