相关this https://stackoverflow.com/questions/4094253/name-lookup-clarification
我想知道嵌套名称说明符到底是什么?我查阅了草稿,但我可以理解语法,因为我还没有上过任何编译器设计课程。
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;
}
::S
is a 合格的 ID.
In the 合格的 ID ::S::f
, S::
is a 嵌套名称说明符.
In informal terms1, a nested-name-specifier is the part of the id that
- 开始于 a 的最开始合格的 ID或在初始范围解析运算符之后(
::
) 如果出现在最开头id and
- 以最后一个作用域解析运算符结束合格的 ID.
Very informally1, an id is either a qualified-id or an unqualified-id. If the id is a qualified-id, it is actually composed of two parts: a nested-name specifier followed by an unqualified-id.
Given:
struct A {
struct B {
void F();
};
};
-
A
is an 不合格的 ID.
-
::A
is a 合格的 ID但没有嵌套名称说明符.
-
A::B
is a 合格的 ID and A::
is a 嵌套名称说明符.
-
::A::B
is a 合格的 ID and A::
is a 嵌套名称说明符.
-
A::B::F
is a 合格的 ID以及两者B::
and A::B::
are 嵌套名称说明符.
-
::A::B::F
is a 合格的 ID以及两者B::
and A::B::
are 嵌套名称说明符.
[1] 这是一个相当不准确的描述。很难用简单的英语描述语法......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)