这让我大吃一惊。如果需要,我会发布代码,前提是答案是“不,它不应该那样做”。
问题很简单:
嵌套在“拥有”类中的类(因为没有更好的词)是否应该能够通过自己指向拥有类实例的指针访问拥有类的私有变量?
因为这就是我所看到的;我正在使用 2011 版的 C++。这是预期的吗?
引用 C++ 标准 N3485 class.access.nested
:
嵌套类是成员
type
,因此具有与任何其他成员相同的访问权限。封闭类的成员对嵌套类的成员没有特殊的访问权限;应遵守通常的访问规则(第 11 条)
class E {
int x;
class B { };
class I {
B b; // OK: E::I can access E::B
int y;
void f(E* p, int i) {
p->x = i; // OK: E::I can access E::x
}
};
int g(I* p) {
return p->y; // error: I::y is private
}
};
您可以在此处找到有关第 11 条的信息: C++ 标准论文 N3485(需要通过链接查看文件或下载文件)
所有者类中定义的变量在其范围内是私有的:即该范围内的任何东西,包括嵌套类都可以访问它们。如果这不是您想要的行为,则将嵌套类的定义移到所有者类之外