我有以下代码:

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
}
NestedBase类是Base的私有(private)嵌套类,因此似乎B行不会编译很自然。但是,另一方面,变量b具有公共(public)成员nested,我可以从Do()外部调用它的方法Base(如A行所示)。在这种情况下,有哪些具体规则来规范对私有(private)嵌套类(或其成员)的访问?标准对此有何表述?

最佳答案

根据标准$11.7/1 Nested classes [class.access.nest]:



因此,这非常简单。 NestedBaseprivate类的Base成员,因此无法在Base::NestedBase中访问main()
b.nested.Do();很好,因为nestedDo()都是public成员。 NestedBaseprivateBase嵌套类这一事实无关紧要,在这里无关紧要。

10-08 17:31