相关疑难解决方法(0)

非限定名称查找:为什么本地声明隐藏使用指令的声明

考虑以下代码:

namespace A
{
   int i = 24;
}

namespace B
{
    using namespace A;
    int i = 11;

    int k = i; // finds B::i, no ambiguity
}
Run Code Online (Sandbox Code Playgroud)

basic.lookup.unqual.2:

§6.4.1非限定名称查找[basic.lookup.unqual]

  1. using-directive提名的命名空间中的声明在包含using-directive的命名空间中可见; 见[namespace.udir].出于[basic.lookup.unqual]中描述的非限定名称查找规则的目的,using-directive指定的命名空间中的声明被视为该封闭命名空间的成员.

对我来说,标准说很清楚,对于不合格的名称查找(的目的iint k = i)的声明,iA被认为是成员B所以i应该是暧昧int k = i,不过双方gccclang 编译和解决i的地方B::i.我搜索了标准(basic.scope.hidingnamespace.udir),并没有找到与上述内容相矛盾的例外或规则.我发现对于限定名称查找,但不是对于非限定名称查找.

为什么i明确无误?

c++ language-lawyer name-lookup c++14

6
推荐指数
1
解决办法
162
查看次数

标签 统计

c++ ×1

c++14 ×1

language-lawyer ×1

name-lookup ×1