gpt4 book ai didi

c++ - 虚拟基类的创建顺序

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

我有以下问题:

struct A1 {
A1() { std::cout << "A1, "; }
};

struct A2 {
A2() { std::cout << "A2, "; }
};

struct AA1 : virtual A1, A2 {
AA1() { std::cout << "AA1, "; }
};

struct AA2 : A1, virtual A2 {
AA2(){ std::cout << "AA2, "; }
};

struct B : AA1, virtual AA2 {
B() { std::cout << "B "; }
};

int main() {
B b;
}

当您运行这段代码时,答案是:

A1 A2 A1 AA2 A2 AA1 B

我想了解第一个 A1 是在哪里创建的。

我知道虚拟类在非虚拟类之前调用​​的规则,但第一个 A1 是困扰我的问题。

最佳答案

第一个 A1 来自 B 的(非虚拟)基 AA1 的(虚拟)基的初始化。

首先初始化B的所有虚基,依次为A1A2AA2。 (AA2 的初始化导致输出 A1 AA2。)然后是直接基,其中只有一个,AA1(其初始化打印 A2 AA1),最后是类本身,打印 B。首先是所有虚拟基地,然后才是剩余的非虚拟基地。

关于c++ - 虚拟基类的创建顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42319938/

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