有时候我会找到类似下面的代码(实际上有些类向导会创建这样的代码):
// C.h
namespace NS {
class C {
void f();
};
}
Run Code Online (Sandbox Code Playgroud)
并在实现文件中:
// C.cpp
#include "C.h"
using namespace NS;
void C::f() {
//...
}
Run Code Online (Sandbox Code Playgroud)
我试过的所有编译器都接受那种代码(gcc,clang,msvc,compileonline.com).是什么让我感到不舒服的是using namespace NS;.从我的观点来看,C::f()生活在全局命名空间中的环境中,该环境对生活在命名空间NS中的对象具有不合格的访问权限.但是在编译器的观点中void C::f()存在namespace NS.正如我尝试的所有编译器都分享了这一观点,他们可能是正确的,但是标准中的这个意见得到了支持?