考虑以下代码:
class A {
};
class B : public A {
};
class C : public B{
public:
C() : A() {} // ERROR, A is not a direct base of B
};
在这种情况下,GCC(4.8.1,C++99)会给出正确的错误信息(我理解这种行为): prog.cpp:12:8: error: type ‘a’ is not a direct base of ‘c’
然而,如果b和a之间的继承是虚拟的,则不会发生这种情况:
class A {
};
class B : virtual public A {
};
class C : public B{
public:
C() : A() {} // OK with virtual inheritance
};
为什么这样可以运行呢? 编译器现在会把A看作是C的直接基类吗?