我知道布鲁斯·埃克尔的Thinking in C++不是参考书,但我发现了一个奇怪的段落,我不明白它是否仍适用于今天:
使嵌套结构不会自动赋予其访问权限 私人会员。要做到这一点,你必须遵循一个特定的 form:首先,声明(不定义)嵌套结构,然后 将它声明为朋友,最后定义结构。该 结构定义必须与朋友声明分开, 否则编译器会将其视为非成员。
我实际上尝试过这一点而没有将嵌套结构声明为朋友而且它有效:
struct myStruct{
private:
int bar;
public:
struct nestedStruct{
void foo(myStruct *);
}a;
};
void myStruct::nestedStruct::foo(myStruct * p){
p->bar = 20;
}
是否仍需要声明嵌套结构的朋友才能修改基类的私有成员?
答案 0 :(得分:6)
那句话错了。嵌套的内部类类型可以访问封闭类类型的所有成员(包括private
)。
在C ++ 98中并非如此,您的版本可能是指该版本的标准。在C ++ 03和C ++ 11中,引用不适用。
1嵌套类是成员,因此具有与任何其他成员相同的访问权限。的成员 封闭类对嵌套类的成员没有特殊访问权限;通常的访问规则(第11条) 应该遵守。