C++嵌套结构的朋友
Friend for nested structure in C++
我知道布鲁斯·埃克尔(Bruce Eckel)的《C++思维》不是一本参考书,但我发现了一个奇怪的段落,我不明白它今天是否仍然适用:
使结构嵌套不会自动授予其访问权限 私人成员。为此,您必须遵循特定的 形式:首先,声明(不定义)嵌套结构,然后 将其声明为好友,最后定义结构。这 结构定义必须与 friend 声明分开, 否则,编译器会将其视为非成员。
我实际上尝试了这个,没有将嵌套结构声明为朋友,它奏效了:
struct myStruct{
private:
int bar;
public:
struct nestedStruct{
void foo(myStruct *);
}a;
};
void myStruct::nestedStruct::foo(myStruct * p){
p->bar = 20;
}
是否仍然需要声明嵌套结构友元才能修改基类的私有成员?
这句话是错误的。嵌套的内部类类型可以访问封闭类类型的所有成员(包括private
)。
在 C++98 中并非如此,您的版本可能指的是该版本的标准。在 C++03 和 C++11 中,报价不适用。
11.7 嵌套类 [class.access.nest]
1 嵌套类是一个成员,因此具有与任何其他成员相同的访问权限。成员封闭类对嵌套类的成员没有特殊访问权限;通常的访问规则(第11条)应服从。
相关文章:
- 如何循环打印顶点结构
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 预处理器:插入结构名称中的前一个行号
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 孤立代码块在结构中引发异常
- 有什么方法可以遍历结构吗
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 无法将结构注册为增强几何体3D点
- 多成员Constexpr结构初始化
- C++将文本文件中的数据读取到结构数组中
- 如何重构类层次结构以避免菱形问题
- 如何在C++中序列化结构数据
- std::vector的包装器,使数组的结构看起来像结构的数组
- 没有为自己的结构调用列表推回方法
- 在VS 2017中,朋友通过具有私有析构函数的结构的unique_ptr向量进行迭代失败
- 沿类层次结构的私人继承,为什么在整个层次结构中都需要朋友
- 将受保护的结构成员分配给朋友
- C++嵌套结构的朋友