相关疑难解决方法(0)

使用命名空间导致名称隐藏吗?

请考虑以下代码:

namespace C {
    class X {};
}

namespace A {
    class X {};

    namespace B {
        using namespace C;

        X x;
    }
}
Run Code Online (Sandbox Code Playgroud)

我期待的类型xC::X由于using namespace指令,而是既VS2010和在线LLVM/Clang的编译器解决X了命名空间内BA::X.使用using声明(using C::X)更改using指令,然后它会C::X按预期解析.

标准说明使用指令[7.3.4.2]:

using-directive指定指定命名空间中的名称可以在using-directive出现在using-directive之后的范围内使用.在非限定名称查找(3.4.1)期间,名称看起来好像是在最近的封闭命名空间中声明的,其中包含using-directive和指定的命名空间.

我对此的解读是,C::X应该看起来好像在命名空间中声明B,有效地隐藏A::X.标准的哪个部分是在使用指令和使用声明之间的这种不一致的背后?有没有办法通过using指令隐藏外部作用域的名称?

c++ namespaces language-lawyer

12
推荐指数
1
解决办法
607
查看次数

标签 统计

c++ ×1

language-lawyer ×1

namespaces ×1