C++ "feature test macros" 的值是什么意思?

What do the values of the C++ "feature test macros" mean?

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

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

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

__cpp_lib_hardware_interference_size 201703

(在 cppreference 中 link)?

基于cppreference.com,它说:

The following macros expand to a numeric value corresponding to the year and month when the feature has been included in the working draft.

When a feature changes significantly, the macro will be updated accordingly.

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