gpt4 book ai didi

c++ - 多重继承情况下的执行顺序

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:36:23 25 4
gpt4 key购买 nike

class A: public B, public C { };

在这种情况下执行顺序是:

B(); // base(first)  
C(); // base(second)
A(); // derived

class A: public B, virtual public C { }; 

但在这种情况下,当我在继承时用类 c 编写虚拟时,顺序为

// execution becomes:  
C(); // virtual base
B(); // ordinary base
A(); // derived

我在某处读到调用构造函数的顺序取决于继承多个类时声明的顺序但是执行顺序如何在用类编写虚拟时发生变化。我不明白为什么我会得到这样的结果.

最佳答案

根据 C++ 标准,虚基类构造函数总是首先执行。来自工作草案 N3242 ,第 272 页第 10 行,我们了解到:

  • 虚基类构造函数先行,按照继承图从左到右深度优先遍历的顺序。
  • 接下来是直接基类,按照声明顺序。

因此,您看到的行为正是 C++ 标准所要求的。这是有道理的,因为虚基类可能在继承中出现多次,当然它们每个只能构造一次。因此必须有第一轮虚拟基类构造,然后是通常的非虚拟基类构造。

this page 上也有很好的解释.

关于c++ - 多重继承情况下的执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24722846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com