查看 [[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)
            ^

Live code

这是使用此属性的有效用例,还是在该位置添加属性的其他用例,或者这仅仅是无用的添加?

最佳答案

此属性的目的是声明某个实体可能永远不会被使用,如果是这种情况,则实现不应打扰警告您某个地方,例如,您可能使用了错误的实体。
switch语句完全是完全不同的事情:即使在该TU中从未使用过枚举器,也不处理枚举器是有问题的;它表明程序中存在逻辑缺口。如果该函数具有外部链接,而其他人使用该枚举器调用该函数,该怎么办?

简而言之,即使在我们将枚举器标记为可能未使用的TU(感觉毫无意义,因为它们通常在命名空间范围内),在程序逻辑中覆盖它仍然是非常明智的建议(Clang为您提供了正确的选择)该建议)。

10-08 08:23