相关疑难解决方法(0)

可以在声明它们的命名空间之外定义类成员吗?

有时候我会找到类似下面的代码(实际上有些类向导会创建这样的代码):

// 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.正如我尝试的所有编译器都分享了这一观点,他们可能是正确的,但是标准中的这个意见得到了支持?

c++ namespaces using-directives language-lawyer c++11

14
推荐指数
1
解决办法
912
查看次数