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

Dun*_*can 4 c++ scope namespaces

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

namespace Foo {
    namespace Bar {
        class X;
    }
}

using namespace Foo;
int main(void)
{
    ::Bar::X x;
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*lds 7

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

由于namespace Barnamespace Foo当前命名空间和当前命名空间之间的using语句是全局命名空间,因此namespace Bar被带入全局命名空间的上下文中.