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.
因此,您可以检查该功能是否存在,检查是否定义了宏。或者您可以根据宏值查看功能版本。
为了测试某个功能,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.
因此,您可以检查该功能是否存在,检查是否定义了宏。或者您可以根据宏值查看功能版本。