在下面的example:
struct Foo {
[[maybe_unused]] int member = 1;
void bar() {
[[maybe_unused]] int local = 0;
}
};
int main(int argc, char* argv[]) {
Foo f{};
f.bar();
return 0;
}
GCC 会发出警告,而 Clang 和 MSVC 不会发出警告:
warning: 'maybe_unused' attribute ignored [-Wattributes]
[[maybe_unused]] int member = 1;
据我所知,这应该是合法的(并且不会被编译器忽略)。根据standard:
10.6.7 可能未使用的属性 [dcl.attr.unused]
...
2. 该属性可以应用于类、typedef-name、变量的声明,非静态数据成员、函数、枚举或枚举器。
...
我讨厌挥舞“编译器错误”锤子,但我不确定在这种情况下还可能是什么。
有人有任何见解吗?
任何属性都可以出于任何原因“被编译器忽略”,除非标准另有说明(例如在明确禁止的位置使用属性)。
GCC 并不是说你不能在那里放一个;而是说你不能在那里放一个。它是说,放在那里不会做任何事情,因为它们可能不会警告可能未使用的成员变量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)