Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 类范围内的限定名称查找_C++_Class_Scope_Language Lawyer - Fatal编程技术网

C++ 类范围内的限定名称查找

C++ 类范围内的限定名称查找,c++,class,scope,language-lawyer,C++,Class,Scope,Language Lawyer,其中引用了3.4.3.1/1: 如果限定id的嵌套名称说明符指定类,则 在中查找嵌套名称说明符后指定的名称 课程范围 但在3.4.3.1/1中进一步指出: 该名称应代表该类别或某一类别的一名或多名成员 它的基类 第3.3.8/1节说: 类中声明的名称的潜在作用域不仅包括 名称的声明点后面的声明性区域,但 也是所有函数体的默认参数, 例外规范,以及 该类中的非静态数据成员(包括嵌套 课程) 这意味着基类不包括在派生类范围内。3.4.3.1/1应重新制作为: 如果限定id的嵌套名称说明符指定类,则

其中引用了3.4.3.1/1:

如果限定id的嵌套名称说明符指定类,则 在中查找嵌套名称说明符后指定的名称 课程范围

但在3.4.3.1/1中进一步指出:

该名称应代表该类别或某一类别的一名或多名成员 它的基类

第3.3.8/1节说:

类中声明的名称的潜在作用域不仅包括 名称的声明点后面的声明性区域,但 也是所有函数体的默认参数, 例外规范,以及 该类中的非静态数据成员(包括嵌套 课程)

这意味着基类不包括在派生类范围内。3.4.3.1/1应重新制作为:

如果限定id的嵌套名称说明符指定类,则 在中查找嵌套名称说明符后指定的名称 类的范围和it基类范围中的

我说得对吗?

不,你说得不对。 您忘记的是,指定了类范围内的名称查找包括查找在所述类的直接基中声明的名称,如
10.2p5
中所述

10.2p5
成员名称查找
[class.Member.lookup]

否则(即,
C
不包含
f
的声明或生成的声明集为空),
S(f,C)
最初为空。如果
C
有基类,则计算每个直接基类子对象
B_i
f
的查找集,并将每个查找集
S(f,B_i)
,依次合并为
S(f,C)


简单解释 前面的引文看起来可能过于复杂,但它描述了在
C
范围内查找名称
f
的方法。如果
C
中没有声明的名称为
f
,搜索将继续包括在
C
的任何直接基中声明的名称


注意:措辞是递归的,如果在
C
的直接基中找不到名称
f
,那么
C
基的潜在基也是搜索
f

一个小代码示例将大大有助于理解这个问题@TemplateRex我认为没有合适的代码示例:)。我的静默纯粹是理论上的。应该有一个代码示例,其中一个解释发现了与另一个解释不同的名称。您的意思是,如果限定id的嵌套名称说明符指定了一个类,在类的作用域中查找嵌套名称说明符后指定的名称必须解释为要查找declr的第一个作用域是由嵌套名称spcifier显式指定的类。如果没有找到合适的查找,则在基类(如果有)的范围内继续查找。我明白你的意思了吗?