【问题标题】:How to use C++ "feature test macros"?如何使用 C++“功能测试宏”?
【发布时间】:2019-03-15 20:56:09
【问题描述】:

为了测试一个特性,cppreference 提到了这些特性测试宏: link.

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

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

__cpp_lib_hardware_interference_size 201703

(在 cppreference 链接内)?

【问题讨论】:

  • 在我看来,这只是面向未来,因此如果某个功能被认为不完整并且需要在标准的未来版本中进行更新,则可以区分更新前和更新后。

标签: c++ gcc compiler-flags dialect


【解决方案1】:

基于cppreference.com,它说:

以下宏扩展为对应于 功能已包含在工作中的年份和月份 草稿。

当某项功能发生重大变化时,宏会更新 相应地。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 2017-08-30
    相关资源
    最近更新 更多