【发布时间】:2018-07-16 04:19:15
【问题描述】:
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++ 中,规则的表达方式不同,但类比成立。
【问题讨论】:
-
标准中没有任何内容将属性标识符链接到程序中定义的任何名称。这就是属性的重点。干扰其他名称的标识符称为保留字。属性名称不是保留字。
-
@n.m.我想你有点错过了我的观点..请查看更新。不过还是谢谢。