Multiple (diamond) inheritance compiles without “virtual”, but doesn't with
问题 Given the following code (without virtual inheritance) : class A { public: virtual void f() = 0; }; class B : public A { public: virtual void f() {} }; class C : public A { public: virtual void f() {} }; class D : public B, public C { /* some code */ }; int main() { D d; return 0; } the code compile. On the other hand , here : class A { public: virtual void f() = 0; }; class B : virtual public A { virtual void f() {} }; class C : virtual public A { virtual void f() {} }; class D : public B,