来自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();
}
这里有两个部分:
B
访问私有类型别名woah
以定义自己的成员。test
的成员函数B
访问x
对象的私有A
成员。当然相反的情况似乎是正确的,因为引用说:A
无法访问B
的私有成员(不是这个例子显示的)。那么这是我书中的错误,还是我误解了它的含义?
答案 0 :(得分:2)
决定缺乏嵌套类的访问权限是标准中的一个错误,并随后进行了纠正。现在,嵌套类享有与所有成员相同的访问级别,即总访问权限。