与此相关
我想知道嵌套名称说明符究竟是什么?我在草稿中查了一下但是我能理解语法,因为我还没有学过任何编译器设计课程.
void S(){}
struct S{
S(){cout << 1;}
void f(){}
static const int x = 0;
};
int main(){
struct S *p = new struct ::S;
p->::S::f();
S::x;
::S(); // Is ::S a nested name specifier?
delete p;
}
Run Code Online (Sandbox Code Playgroud)
Jam*_*lis 35
::S是一个合格的身份证.
在qualified-id中 ::S::f,S::是一个嵌套名称说明符.
在非正式方面1,一个嵌套的名字说明符是部分ID是
::)如果一个出现在最开始的ID和非常非正式1,id是qual-id或nonqualified-id.如果id是qualified-id,它实际上由两部分组成:嵌套名称说明符后跟unqualified-id.
鉴于:
struct A {
struct B {
void F();
};
};
Run Code Online (Sandbox Code Playgroud)
A是一个不合格的身份证.::A是一个限定ID,但没有嵌套名称说明符.A::B是一个限定ID,A::是一个嵌套名称说明符.::A::B是一个限定ID,A::是一个嵌套名称说明符.A::B::F是一个合格的-ID和两个B::和A::B::是嵌套名称符.::A::B::F是一个合格的-ID和两个B::和A::B::是嵌套名称符.[1]这是一个非常不精确的描述.用简单的英语描述语法很难......
嵌套的命名空间说明符是:
nested-name-specifier :
class-or-namespace-name::nested-name-specifier(optional)
Run Code Online (Sandbox Code Playgroud)
也就是说,名称空间和类名称的非空列表,每个名称后跟::,表示程序的整个"命名空间树"中的相对分支.例如,my_namespace::,my_namespace::inner_namespace::,my_namespace::my_class::,和my_class::.
特别注意区别于:
qualified-namespace-specifier :
::(optional) nested-name-specifier(optional) class-or-namespace-name
Run Code Online (Sandbox Code Playgroud)
因为嵌套名称说明符可能不是绝对的(以::引用全局作用域为前缀),而qualified-namespace-specifier可以是,但不以::.
在您的示例中,::S解析为函数::S(),而不是结构(在您在问题开头链接的问题中,Stackoverflow上讨论了此优先级规则),因此它不是嵌套的名称说明符.
| 归档时间: |
|
| 查看次数: |
41827 次 |
| 最近记录: |