[[maybe_unused]] 在枚举器上
[[maybe_unused]] on enumerator
查看[[maybe_unused]]
的规范,它指出:
显示在类、typedef、变量、非静态数据成员、函数、枚举或枚举器的声明中。如果编译器对未使用的实体发出警告,则会禁止对声明maybe_unused的任何实体发出警告。
由于这提到了枚举器,我有点希望它有一个用例。由于我唯一能想到的就是-Wswitch
警告,我尝试了Clang,GCC和MSVC。
enum A
{
B,
C [[maybe_unused]]
};
void f(A a)
{
switch (a)
{
case B: break;
}
}
所有 3 个编译器都给了我以下警告的变体:
<source>:9:13: warning: enumeration value 'C' not handled in switch [-Wswitch]
switch (a)
^
实时代码
这是使用此属性的有效用例,是否有其他用例在此位置添加属性,或者这只是无用的添加?
此属性的目的是声明实体可能永远不会被使用,如果是这种情况,实现不应该打扰警告你,例如,你可能在某个地方使用了错误的实体。
switch
语句是完全不同的事情:即使枚举器从未在该 TU 中使用过枚举器,不处理枚举器也是有问题的;它表明程序中存在逻辑差距。如果该函数具有外部链接,并且其他人使用该枚举器调用它,该怎么办?
简而言之,即使在我们将枚举器标记为可能未使用的 TU 中(这感觉毫无意义,因为在命名空间范围内它们通常是(,在您的程序逻辑中覆盖它仍然是非常明智的(Clang 给你这个建议是非常正确的(。
为 Clang 记录了一个错误并标记为已解决:https://bugs.llvm.org/show_bug.cgi?id=36231
这似乎证实了允许在交换机中丢失枚举值而不发出警告,以防它被标记为 [[maybe_unused]]
相关文章:
- 不带大括号的枚举形式
- 枚举环境变量的惯用C++14/C++17方法
- 类似枚举的计算常量
- 如何正确实现和访问运算符的各种自定义枚举器
- 错误:从"int"到枚举c++的转换无效
- C++中构造函数中的枚举
- 访问在 C++ 结构中声明的枚举变量
- 枚举类'classname'的多重定义
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- typedef 枚举和枚举类有什么区别?
- 为什么我的开关/机箱在使用枚举时默认?
- 标准::可选枚举的比较运算符
- C++两个源文件之间共享的枚举的静态实例
- 打印没有铸件的枚举可以在C++中吗?
- 枚举成员与静态 int 成员?
- C++:枚举:错误:应使用标识符而不是"}"
- 带有 c++ 的枚举(输入检查)
- 在 qml 中使用 Q_ENUM 和 Q_PROPERTY 作为枚举类
- 为什么 int 类型的枚举类值不能用作 int
- 在 C++ 中输出枚举类类型的向量元素