C++“功能测试宏”的值是什么意思?

hae*_*lix 7 c++ gcc compiler-flags dialect

为了测试某个功能, cppreference 提到了这些功能测试宏: link

如果编译器中存在该功能,则定义宏。但我不明白为什么,如果定义了,它们会被定义为类似的东西201606,我相信这是C++ 的版本,而不是编译器的版本

例如,我正在使用 GCC 的最新版本来实现-std=c++17该功能__cpp_lib_hardware_interference_size。该宏未定义,我认为这意味着 GCC 没有该功能,尽管尝试使用 c++17(和 c++2a)开关 8.2.1。在这种情况下,记录值的意义是什么:

__cpp_lib_hardware_interference_size 201703

(在 cppreference 链接内)?

J. *_*eja 10

根据cppreference.com,它说:

以下宏扩展为与该功能包含在工作草案中的年份和月份相对应的数值。

当某个功能发生显着变化时,宏也会相应更新。

因此,您可以检查该功能是否存在,检查宏是否已定义。或者您可以根据宏值检查功能版本。