在下面的代码中,C 类似乎无法访问 A 的构造函数,这是由于虚拟继承所必需的。然而,代码仍然可以编译和运行。为什么会起作用?
class A {};
class B: private virtual A {};
class C: public B {};
int main() {
C c;
return 0;
}
此外,如果我从 A 中删除默认构造函数,例如
class A {
public:
A(int) {}
};
class B: private virtual A {
public:
B() : A(3) {}
};
然后
class C: public B {};
会(出乎意料地)编译,但是
class C: public B {
public:
C() {}
};
无法按预期编译。
使用“g++ (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)”编译的代码,但已验证与其他编译器的行为相同。
最佳答案
根据C++ Core Issue #7不能派生具有虚拟私有(private)基的类。这是编译器中的一个错误。
关于C++私有(private)虚拟继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2371176/