与问题相关 如何检查 C++11 支持? C++17 的 __cplusplus 值是多少?
如何查询编译器是否可以处理/设置为使用 C++20?我知道原则上可以通过以下方式查询 C++ 版本:
#if __cplusplus > ???
// C++20 code here
#endif
???
对于 C++20 应该是什么?
原文由 user2296653 发布,翻译遵循 CC BY-SA 4.0 许可协议
与问题相关 如何检查 C++11 支持? C++17 的 __cplusplus 值是多少?
如何查询编译器是否可以处理/设置为使用 C++20?我知道原则上可以通过以下方式查询 C++ 版本:
#if __cplusplus > ???
// C++20 code here
#endif
???
对于 C++20 应该是什么?
原文由 user2296653 发布,翻译遵循 CC BY-SA 4.0 许可协议
C++20 的值为 202002L
,您可以在 [cpp.predefined]p1.1 中看到:
__cplusplus
整数文字
202002L
。 [ _注_:本国际标准的未来版本打算用更大的值替换此宏的值。 —— 尾注]
因此,对于已经实现新标准的编译器,您可以通过以下方式检查:
#if __cplusplus >= 202002L
// C++20 (and later) code
#endif
这是到目前为止的编译器支持:
/Zc:__cplusplus
)202000L
;注意 0
)原文由 Acorn 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
现在还为时过早。
在标准取代它之前,请使用:
因为 C++20 的预定义宏将大于 C++17 的宏。
正如@SombreroChicken 的回答所提到的, [cpp.predefined] (1.1) 指定(强调我的):
截至 2018 年 11 月,使用的宏是:
201709L
适用于 C++2a。现场演示
201707L
。现场演示
201704L
(正如@Acorn的回答所提到的)。PS:如果您对特定功能感兴趣,那么 [cpp.predefined] (1.8) 定义了相应的宏,您可以使用它。但请注意,它们将来可能会发生变化。