gpt4 book ai didi

c++ - [[maybe_unused]] 在枚举器上

转载 作者:可可西里 更新时间:2023-11-01 16:11:05 26 4
gpt4 key购买 nike

查看 [[maybe_unused]] 的规范,它指出:

Appears in the declaration of a class, a typedef­, a variable, a non­static data member, a function, an enumeration, or an enumerator. If the compiler issues warnings on unused entities, that warning is suppressed for any entity declared 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 是非常正确的)给你那个建议)。

关于c++ - [[maybe_unused]] 在枚举器上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48488635/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com