我正在尝试了解 C++ 中继承顺序的影响。我在网上查看,但找不到明确而充分的答案...
因此,为了这个问题,假设有 2 个类:B 类和 C 类。
现在,定义:
class A1 : public B, public C{ ... };
class A2 : public C, public B{ ... };
A1和A2有什么区别?
非常感谢!
我正在尝试了解 C++ 中继承顺序的影响。我在网上查看,但找不到明确而充分的答案...
因此,为了这个问题,假设有 2 个类:B 类和 C 类。
现在,定义:
class A1 : public B, public C{ ... };
class A2 : public C, public B{ ... };
A1和A2有什么区别?
非常感谢!
C++11 标准说 (§10.1) [class.mi]:
推导的顺序并不重要,除非构造函数 (12.6.2)、清理 (12.4) 和存储布局 (9.2, 11.1) 的初始化语义指定。
引用的三个段落表明
请注意,内存布局可能很重要。例如,如果外部库进行天真的 C 样式转换,假设它感兴趣的对象部分是在开头,它可能导致难以调试的运行时错误。
派生顺序仅与确定构造函数的默认初始化顺序和析构函数的清理顺序有关。
推导的顺序并不重要,除非构造函数 (12.6.2)、清理 (12.4) 和存储布局 (9.2, 11.1) 的初始化语义指定。——尾注]”(§10.1/2)
来自 IBM 的 C++ 文档:多重继承