【问题标题】:[[maybe_unused]] applied to static data members[[maybe_unused]] 应用于静态数据成员
【发布时间】:2018-03-30 20:13:36
【问题描述】:

标准草案在 10.6.6 第 2 项中声明了 [[maybe_unused]]

“该属性可以应用于类、typedef-name、变量、非静态数据成员、函数、枚举或枚举器的声明。”

有什么理由排除静态数据成员吗?即

struct Foo {
    [[maybe_unused]] static inline int foo = 0;
};

我问,因为我有一个静态数据成员,它的类型有一个重要的构造函数,它做有用的东西,但在其他方面没有使用。

【问题讨论】:

  • 有趣的是,"a variable" 也可以是静态存储持续时间。好问题!
  • 是否有编译器实际上拒绝/忽略静态数据成员的属性?我假设 foo 有资格作为一个变量。
  • 我不认为标准使用“变量”来包含静态数据成员,而不是静态持续时间变量。不确定编译器做了什么。我的问题更多是关于标准规定他们应该做什么才能合规。我知道编译器应该忽略它无法识别的属性,但我不确定以不合规方式使用的已知属性。

标签: c++ c++17


【解决方案1】:

[basic]/6 表示任何对象声明都构成一个变量。 “非静态数据成员”出现在“变量”旁边的列表中,因为 reference 类型的非静态数据成员不是变量。

【讨论】:

  • 那么您是说标准将静态数据成员视为“变量”,因此标准中的列表将静态数据成员包括为可以应用 [[maybe_unused]] 的东西。跨度>
  • @goneskiing:是的,我试图解释列表中“非静态”令人困惑的存在。
  • 我在 Visual Studio 中使用 Resharper C++ 遇到了这个问题。 resharper 中的警告标记为 [clang-diagnostic-ignored-attribute]。这对我来说意味着 clang 有问题。
  • @goneskiing:我同意:Resharper 是对的 Clang doesn’t like it,这对我来说似乎是一个 Clang 错误; GCC accepts it(但无论如何都不会那么容易发出警告)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-28
  • 2018-06-05
  • 1970-01-01
  • 1970-01-01
  • 2021-09-10
相关资源
最近更新 更多