嵌套类是否可以访问其所有者的私有变量?

时间:2013-04-24 18:18:30

标签: c++ variables

这让我大吃一惊。如果我需要,我会发布代码,只有当答案是“不,它不应该这样做。”

问题很简单:

一个嵌套在“拥有”类中的类(缺少一个更好的单词)是否能够通过自己指向拥有类实例的指针来访问拥有类的私有变量? < / p>

因为这就是我所看到的;我使用的是2011版的C ++。这是预期的吗?

2 个答案:

答案 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)

所有者类中定义的变量在其范围内是私有的:即该范围内的任何内容(包括嵌套类)都可以访问它们。如果这不是您想要的行为,那么将嵌套类的定义移出所有者类

之外