首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++多重继承顺序

C++多重继承顺序
EN

Stack Overflow用户
提问于 2013-06-27 03:35:26
回答 2查看 9.9K关注 0票数 27

我正在尝试理解继承顺序在C++中的影响。我在网上看了看,但我找不到一个明确而充分的答案……

因此,为了解决这个问题,假设有两个类:B类和C类。

现在,定义:

代码语言:javascript
复制
class A1 : public B, public C{ ... };
class A2 : public C, public B{ ... };

A1和A2有什么区别?

非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-27 04:08:39

C++11标准规定(§10.1) [class.mi]

除非由构造函数初始化(12.6.2)、清理(12.4)和存储布局(9.2,11.1)的语义指定,否则派生的顺序并不重要。

引用的三个段落揭示了

  • 构造函数按照您写下的顺序调用(列表中的第一个基类首先构造) (§12.6.2.10)。不同的规则适用于虚拟基类,它们总是在以相反的构造顺序调用任何直接基类之前从派生最多的类构造(列表中的第一个基类最后被析构)未指定
  • 存储布局。您不能对内存中的类布局做出任何假设。唯一的例外是所谓的标准布局类(§9),它基本上是一个C风格的结构。但由于这些类不允许在类层次结构中有多个具有非静态成员的类,因此这个问题并不真正适用于这里。

请注意,内存布局可能很重要。例如,如果外部库进行简单的C风格强制转换,假设它感兴趣的对象部分位于开头,则可能导致难以调试的运行时错误。

票数 16
EN

Stack Overflow用户

发布于 2013-06-27 03:37:24

派生的顺序只与确定构造函数的默认初始化顺序和析构函数的清除顺序有关。

除非由构造函数初始化(12.6.2)、清理(12.4)和存储布局(9.2,11.1)的语义指定,否则派生的顺序并不重要。-尾注]“(§10.1/2)

来自IBM的C++文档:Multiple inheritance

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17328921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档