嵌套类访问封闭类成员

时间:2016-01-24 14:33:47

标签: c++ c++11 inner-classes

来自C ++ Primer第5版作者:Stanley Lippman等人(19.5):

  

嵌套类可以与非内联类具有相同类型的成员。与任何其他类一样,嵌套类使用访问说明符控制对其自己成员的访问。封闭类没有对嵌套类成员的特殊访问权限,嵌套类对其封闭类的成员没有特殊访问权限。

粗体部分有什么道理吗?我没有发现嵌套类被限制访问标准(9.7 N3337)中的封闭类成员,下面的代码编译得很好(g ++ 5.2.0)

#include <iostream>

struct A{
private:
    typedef int woah;
public:
    struct B{
        woah x = 5;
        void test() { A f; std::cout << f.x;}
    };
private:
    int x = 5;
};

int main(){
    A::B j;
    j.test();
}

这里有两个部分:

  1. B访问私有类型别名woah以定义自己的成员。
  2. test的成员函数B访问x对象的私有A成员。
  3. 当然相反的情况似乎是正确的,因为引用说:A无法访问B的私有成员(不是这个例子显示的)。那么这是我书中的错误,还是我误解了它的含义?

1 个答案:

答案 0 :(得分:2)

决定缺乏嵌套类的访问权限是标准中的一个错误,并随后进行了纠正。现在,嵌套类享有与所有成员相同的访问级别,即总访问权限。