是一个namspace类

Hai*_*ang 1 c++ namespaces

以下代码将帮助我直接向您提出我的问题:

#include<iostream>

class foo {
  public:
  class bar {
    public:
      bar(int a) : m_a(a) {}
      void say() { std::cout << m_a << std::endl;}
    private:
      int m_a;
  };
};


int main()
{
  foo::bar b(3);
  b.say();
}
Run Code Online (Sandbox Code Playgroud)

如你所见,为了声明类bar的对象,我们使用类似语法"foo :: bar"的完全命名空间,尽管实际上bar只是类foo中的一个embebed类类型.我的问题是类本身的范围是否是c ++中的命名空间?

Jam*_*lis 9

不,类不是命名空间.但是,类确实形成了一个声明区域.

您使用相同的语法(::运算符)来引用在类范围内声明的名称,就像引用在命名空间范围内声明的名称一样.


AnT*_*AnT 6

该类不是命名空间,而是范围.你自己已经使用过这个术语了.命名空间是一个范围.类也是范围.该::运营商是一个范围解析操作.范围而非命名空间是在这种情况下可以充当"共同点"的基本术语.范围是您可以::在左侧使用带有类和命名空间的运算符的原因.