根据我的理解,将::
附加到命名空间的前面是指全局命名空间,而不管任何using语句或父命名空间。如果是这种情况,并且我没有误解任何内容,那么为什么这样的代码会编译(至少在Visual Studio中):
namespace Foo {
namespace Bar {
class X;
}
}
using namespace Foo;
int main(void)
{
::Bar::X x;
}
答案 0 :(得分:7)
using namespace Foo;
将namespace Foo
的所有内容带入当前命名空间的上下文中。
由于namespace Bar
是namespace Foo
的内容之一,并且具有using
语句的行上的当前命名空间是全局命名空间,因此namespace Bar
被带入上下文全局命名空间。