Why must virtual base classes be constructed by the most derived class?

前端 未结 3 753
甜味超标
甜味超标 2020-12-01 20:43

The following code won\'t compile:

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

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

// most derived class
class C         


        
3条回答
  •  借酒劲吻你
    2020-12-01 21:24

    Because it avoids this:

    class A {
    public:
        A(int) {}
    };
    
    class B0: virtual public A {
    public:
        B0(): A(0) {}
    };
    
    class B1: virtual public A {
    public:
        B1(): A(1) {}
    };
    
    class C: public B0, public B1 {
    public:
        C() {} // How is A constructed? A(0) from B0 or A(1) from B1?
    };
    

提交回复
热议问题