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

Confusion About C++ Global Namespace

本文关键字:命名空间 C++ 全局 关于      更新时间:2023-10-16

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

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

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

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