类范围内的限定名称查找

时间:2014-06-07 08:38:32

标签: c++ class scope language-lawyer

引用自3.4.3.1/1:

  

如果qualified-id的嵌套名称说明符指定了一个类,那么   在查找嵌套名称说明符后指定的名称   课程范围

但在3.4.3.1/1中进一步说:

  

该名称应代表该类别或一个或多个成员   其基类

而3.3.8 / 1表示:

  

在类中声明的名称的潜在范围不仅包括   声明区域遵循名称的声明点,但是   也是所有函数体,默认参数,   异常规范,以及支持或等于初始化的   该类中的非静态数据成员(包括嵌套中的这些内容)   类)。

这意味着基类不包含在派生类范围中。 3.4.3.1/1应改为:

  

如果qualified-id的嵌套名称说明符指定了一个类,那么   在查找嵌套名称说明符后指定的名称   类的范围和基类范围内的

我是对的吗?

1 个答案:

答案 0 :(得分:2)

不,你不对。

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

  

10.2p5 会员名称查询 [class.member.lookup]

     
    

否则(即,C不包含f的声明或结果声明集为空), S(F,C) 初始为空。如果C具有基类,则在每个直接基类子对象 f 中计算B_i的查找集,并合并每个超级查找集 {{1转换为 S(F,B_i) 。   


简单说明

之前的引用可能看起来过于复杂,但它描述了在S(F,C)范围内查找名称f的方法。如果C中的任何声明都没有名称C,则搜索将继续包含在f的任何直接基础中声明的名称。

注意:如果在C的直接基础中找不到名称f,则措辞是递归的,{{1}的基数的潜在基数}}也搜索C