查找姓名的过程说明

时间:2018-10-07 00:04:54

标签: c++

帮助描述在片段的最后一行中查找名称x的过程:

struct S { static int x; void f(); };
int S::x;
int x;
void S::f() { x; // <-- }

2 个答案:

答案 0 :(得分:0)

我不确定自己是否理解您的问题,但是如果您想访问全局变量x而不是成员x,则可以使用scope resolution operator {{1} }

::

答案 1 :(得分:0)

[basic.lookup.unqual] / 8中描述了类成员函数主体中不合格名称的名称查找过程。依次搜索以下范围:

  • 引用名称的块,然后是同一函数中的封闭块
  • 该类的成员,然后是基类的成员(如果有)
  • 封闭类或函数的成员,然后是其基类的成员,然后是其封闭类或函数的成员,然后是其基类的成员,依此类推
  • 封闭的名称空间,然后是其封闭的名称空间,依此类推,直到全局名称空间

因此,在这种情况下,首先搜索S::f()的正文以找到x的声明;这失败了,因此寻找名称为S的类x的成员;这将找到静态成员S::x。在考虑全局范围之前,查找过程将停止。