什么是嵌套名称说明符?

2024-01-21

相关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(使用前将#替换为@)

什么是嵌套名称说明符? 的相关文章

随机推荐