__cplusplus取值含义解析:为何设置-std=c++23却输出202100?
为什么设置
-std=c++23后__cplusplus输出202100? 主要有这几个核心原因:
编译器版本未达标:GCC 12及更早版本、Clang 15及更早版本,即便指定
-std=c++23,__cplusplus仍会输出202100(C20的标准宏值)。只有GCC 13+、Clang 16+这类较新版本,在启用-std=c++23时才会将__cplusplus设置为202302L(对应C23的标准宏值)。C++23标准的渐进式支持:C23标准是逐步定稿的,早期编译器的
-std=c++23选项只是开启C20基础上的部分C++23特性预览,并未完全适配最终发布的完整标准,因此不会更新__cplusplus宏值。宏定义可手动强制修改(仅作显示):如果暂时无法升级编译器,可手动添加编译选项
-D__cplusplus=202302L强制修改宏的输出值,但这只是改变宏的显示结果,不代表编译器真的支持所有C++23特性。
内容的提问来源于stack exchange,提问作者Alexander S
相关产品推荐
相关产品推荐

