【发布时间】:2017-11-03 14:36:21
【问题描述】:
以下代码无法编译:
class A {
public:
A(int) {}
};
class B: virtual public A {
public:
B(): A(0) {}
};
// most derived class
class C: public B {
public:
C() {} // wrong!!!
};
如果我在C的构造函数初始化列表中调用A的构造函数,那就是:
// most derived class
class C: public B {
public:
C(): A(0) {} // OK!!!
};
确实有效。
显然,原因是虚拟基类必须始终由大多数派生类构造。
我不明白这个限制背后的原因。
【问题讨论】:
-
相关:c++ virtual inheritance 和 Understanding virtual base classes and constructor calls。 @Holt,很好的发现。但我认为你链接的 Qn 被错误地关闭为一些不太相关的 Qn 的副本。我已重新打开它并将其作为此 Qn 的副本关闭。在这个帖子中,我们可以期待更好的答案,因为它更客观和最新。
标签: c++ inheritance virtual-inheritance