Cppreference称双括号内的attribute-list可以是标识符。
假设我在我的C++程序中有一个名为noreturn
的变量(因此它是变量的标识符)。这是否会影响对[[noreturn]]
属性的解释?我的想法是,如果attribute-list中的标识符与普通标识符(在本例中,它们都在全局命名空间中)共享相同的命名空间,则编译器可能将其解释为变量的标识符,然后它将无法将其识别为有效的C ++属性。
示例:
int noreturn = 1;
[[ noreturn ]] void f() {
throw "error";
}
这里给出了[[noreturn]]
的用法: https://en.cppreference.com/w/cpp/language/attributes/noreturn
更新: 为澄清起见,我知道在C语言(而不是C++)中有4个“预定义”的命名空间:用于标签、用于标记、用于结构/联合成员和普通标识符。但它在C(C11 6.2.3)中被定义,因此我想知道C++11是否为它们添加了“属性”命名空间。根据接受的答案,在C++中规则表达方式不同,但类比仍然适用。