为什么c++ 17向名称空间和枚举数添加属性?

Why is C++17 adding attributes to namespaces and enumerators?

本文关键字:枚举 添加 属性 空间 c++ 为什么      更新时间:2023-10-16

正如问题所述,我知道c++ 17中将有名称空间和枚举数的属性。这将如何影响我们的代码?这些属性是什么?它们将允许我们做什么?我找不到任何好的资源来理解这个新功能。

当前,如果要贬值特定的枚举值,则需要依赖编译器扩展。例如,在clang中,您可以按照以下方式指定不推荐的enum值:

enum OperationMode {
  OM_Invalid,
  OM_Normal,
  OM_Terrified __attribute__((deprecated)),
  OM_AbortOnError __attribute__((deprecated)) = 4
};

一旦枚举和命名空间支持属性,就会有一种标准的跨编译器方式来实现类似的功能:

enum OperationMode {
  OM_Invalid,
  OM_Normal,
  OM_Terrified [[deprecated("re-named to invalid")]],
  OM_AbortOnError  [[deprecated("exceptions are used instead")]] = 4
};

其他属性可能有一天会发现与名称空间和枚举值相关,但正如提案作者所述:

本文建议通过允许属性来解决这些问题在枚举数和名称空间上指定,并扩展[[弃用]]属性应用于这些实体,就像最初一样目的。