C++ C++;属性名称空间?

C++ C++;属性名称空间?,c++,c++11,C++,C++11,表示双括号内的属性列表可以是标识符 NordEurn属性属于不同的命名空间(无关)。属性有一个命名空间 标签也是如此: int l=2; l: if (l<5) { l++; goto l; }; intl=2; l:如果(标准中没有任何内容将属性标识符链接到程序中定义的任何名称。这是属性的要点。干扰其他名称的标识符称为保留字。属性名称不是保留字。@n.m.我想你有点遗漏了我的要点。请看更新。但无论如何,谢谢。太好了,谢谢!我知道有一个RE 4“预定义”命名空间:用于标签、标签、结构/

表示双括号内的属性列表可以是标识符

<我的C++程序中有一个变量名为“代码> NordEurn<代码”(因此它是变量的标识符)。它是否会干扰
[[noreturn]]
属性的解释?我的想法是,如果属性列表中的标识符共享与普通标识符相同的命名空间(在本例中,它们都位于全局命名空间中),编译器可能会将其解释为变量的标识符,然后它不会将其识别为有效的C++属性。 例如:

int noreturn = 1;
[[ noreturn ]] void f() {
     throw "error";
}
此处给出了
[[noreturn]]
的用法:


更新:为了澄清,我知道在C(不是C++)中有4个“预定义”名称空间:标签、标记、结构/联合成员和普通标识符。但是它是为C(C116.2.3)定义的,所以我想知道C++11是否添加了一个“属性”名称空间。按照公认的答案,C++中的规则是不同的,但类比是代表的。

< P>属性属于不同的命名空间(无关)。属性有一个命名空间

标签也是如此:

int l=2;
l: if (l<5) { l++; goto l; };
intl=2;

l:如果(标准中没有任何内容将属性标识符链接到程序中定义的任何名称。这是属性的要点。干扰其他名称的标识符称为保留字。属性名称不是保留字。@n.m.我想你有点遗漏了我的要点。请看更新。但无论如何,谢谢。太好了,谢谢!我知道有一个RE 4“预定义”命名空间:用于标签、标签、结构/联合成员和普通标识符。但是它被定义为C(C11 6 2.3),所以我想知道C++ 11是否有一个“属性”命名空间添加到它们中。根据您的答案,情况似乎是这样的。C++有不同的规则(因为类型和代码<结构> /COD>标签在同一个空间中),但类似的说法是>“不在属性标记中包含的任何标识符上执行名称查找(3.4)。”但有一个例外。它是“alignas”说明符,有时也被视为属性。对于“alignas”参数,您可以提供任何常量表达式,包括定义为常量的表达式。