这让我大吃一惊。如果我需要,我会发布代码,只有当答案是“不,它不应该这样做。”
问题很简单:
一个嵌套在“拥有”类中的类(缺少一个更好的单词)是否能够通过自己指向拥有类实例的指针来访问拥有类的私有变量? < / p>
因为这就是我所看到的;我使用的是2011版的C ++。这是预期的吗?
答案 0 :(得分:4)
引用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++ Standard papers N3485(需要通过链接查看文件或下载文件)
答案 1 :(得分:0)
所有者类中定义的变量在其范围内是私有的:即该范围内的任何内容(包括嵌套类)都可以访问它们。如果这不是您想要的行为,那么将嵌套类的定义移出所有者类
之外