C++:私有嵌套类类型的公共成员

und*_*ind 8 c++ inner-classes class-visibility

我有以下代码:

class Base
{
  private:
    class NestedBase
    {
      public:
        void Do() {}
    };

  public:
    NestedBase nested;
};

int main()
{
  Base b;
  b.nested.Do(); // line A compiles
  Base::NestedBase instance; // line B doesn't compile
}
Run Code Online (Sandbox Code Playgroud)

NestedBaseclass是一个私有的嵌套类Base,所以B行无法编译似乎很自然.但是,另一方面,变量b有公共成员nested,我可以Do()从外部调用它的方法Base(如在A行中).在这种情况下,规范对私有嵌套类(或其成员)的访问的准确规则是什么?标准对此有何评价?

son*_*yao 6

根据标准,$ 11.7/1嵌套类[class.access.nest]:

嵌套类是成员,因此具有与任何其他成员相同的访问权限.

所以,这很简单.NestedBaseprivate类的成员Base,因此Base::NestedBase无法访问main().

b.nested.Do();很好,因为nested并且Do()都是public成员.这NestedBase是一个private嵌套类的Base事实并不重要,这与此无关.