【问题标题】:Why is C++17 adding attributes to namespaces and enumerators?为什么 C++17 向命名空间和枚举器添加属性?
【发布时间】:2015-12-09 02:22:16
【问题描述】:

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

【问题讨论】:

  • 好吧,现在您可以弃用带有属性的命名空间或枚举。这些属性与现在存在的属性相同。
  • 就这样?只有命名空间/枚举的弃用可用?
  • 如果您希望新属性标准化,请提出建议。 GCC 和 Clang 等编译器支持的不仅仅是少数标准编译器。无论如何,您可以阅读proposal 以获得动力。我还必须修改我之前的评论;我说的是枚举,但我应该说枚举器。
  • 我认为这个问题不应该结束。答案提供了我发现在其他地方很难(以人类可读的方式)找到的信息。

标签: c++ enums namespaces standards


【解决方案1】:

目前,如果您要折旧特定的枚举值,则需要依赖编译器扩展。例如,在 clang 中,您可以通过以下方式指定不推荐使用的枚举值:

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
};

其他属性有朝一日可能会与命名空间和枚举值相关,但正如提案作者所说:

本文建议通过允许属性 在枚举器和命名空间上指定,并扩展 [[deprecated]] 属性应用于这些实体,就像最初一样 有意的。

【讨论】:

    猜你喜欢
    • 2020-05-11
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多