我有以下代码:
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]:
因此,这非常简单。 NestedBase
是private
类的Base
成员,因此无法在Base::NestedBase
中访问main()
。b.nested.Do();
很好,因为nested
和Do()
都是public
成员。 NestedBase
是private
的Base
嵌套类这一事实无关紧要,在这里无关紧要。