关于C ++全局命名空间的困惑

时间:2013-08-09 20:48:55

标签: c++ namespaces scope

根据我的理解,将::附加到命名空间的前面是指全局命名空间,而不管任何using语句或父命名空间。如果是这种情况,并且我没有误解任何内容,那么为什么这样的代码会编译(至少在Visual Studio中):

namespace Foo {
    namespace Bar {
        class X;
    }
}

using namespace Foo;
int main(void)
{
    ::Bar::X x;
}

1 个答案:

答案 0 :(得分:7)

using namespace Foo;namespace Foo的所有内容带入当前命名空间的上下文中。

由于namespace Barnamespace Foo的内容之一,并且具有using语句的行上的当前命名空间是全局命名空间,因此namespace Bar被带入上下文全局命名空间。