gpt4 book ai didi

c++ - C++ 虚拟继承是如何在编译器中实现的?

转载 作者:IT老高 更新时间:2023-10-28 21:36:08 27 4
gpt4 key购买 nike

编译器如何实现虚拟继承?

在以下代码中:

class A {
public:
A(int) {}
};

class B : public virtual A {
public:
B() : A(1) {}
};

class C : public B {
public:
C() : A(3), B() {}
};

编译器是否生成两个 B::ctor 函数实例,一个没有 A(1) 调用,一个有它?因此,当 B::constructor 从派生类的构造函数中调用时,将使用第一个实例,否则使用第二个。

最佳答案

它依赖于实现。例如,GCC(参见 this question)会发出两个构造函数,一个调用 A(1),另一个不调用。

B1()
B2() // no A

当 B 被构造时,“完整”版本被调用:

B1():
A(1)
B() body

在构造 C 时,会调用基础版本:

C():
A(3)
B2()
B() body
C() body

实际上,即使没有虚继承,也会发出两个构造函数,而且它们是相同的。

关于c++ - C++ 虚拟继承是如何在编译器中实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7360752/

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