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