在限定的declarator-id之后进行名称查找

时间:2014-06-08 07:54:01

标签: c++ class language-lawyer

秒。 3.4.3 / 3说:

  

在declarator-id是qualified-id的声明中,名称   在声明的qualified-id被查找之前使用   定义名称范围;查看qualified-id后面的名称   在成员的类或命名空间的范围内。

3.4.3 / 3 N3797中有一个代码示例:

class X { };
class C {
    class X { };
    static const int number = 50;
    static X arr[number];
};
X C::arr[number];// ill-formed:
                 // equivalent to: ::X C::arr[__C::number__];
                 // not to: C::X C::arr[__C::number__];

但我认为这不是真的,因为X C::arr[number]中使用的非限定名称可以在封闭范围内找到,但X C::arr[C::number]不会搜索封闭范围中的number 。这是一个错字吗?

1 个答案:

答案 0 :(得分:2)

据我所知,例子是正确的,直接来自示例前的段落:

  

在declarator-id为qualified-id,名称的声明中   在声明的qualified-id 之前使用在   定义命名空间范围;

所以找到的X将是::X而不是C::X,因为它位于qualified-id

之前

  

名称以后的名称已查找   在成员的类或命名空间范围内

所以number将是C::number,因为它位于qualified-id。

之后