Почему в множественном наследовании виртуальной базы вызывается только конструктор по умолчанию для базового класса? [Дубликат]

На этот вопрос уже есть ответ здесь:

c ++ виртуальное наследование 3 ответа

В множественном наследовании у меня есть виртуальныйBase класс, который наследуется классомA и классB. A а такжеB базовые классыAB, Пожалуйста, смотрите код ниже. В конструктореA а такжеB, Base(string) конструктор называется. Я ожидаю получить следующий вывод:

Base::Base(std::string)

A::A()

B::B()

Но я получаю следующий вывод:

Base::Base()

A::A()

B::B()

Почему конструктор по умолчаниюBase называется?

#include<iostream>
#include<string>
using namespace std;

class Base{
public:
        Base(){
                cout<<__PRETTY_FUNCTION__<<endl;
        }
        Base(string n):name(n){
                cout<<__PRETTY_FUNCTION__<<endl;
        }
private:
string name;
};

class A : public virtual Base {
public:
        A():Base("A"){
                cout<<__PRETTY_FUNCTION__<<endl;
        }
private:
string name;
};

class B : public virtual  Base {
public:
        B():Base("B"){
                cout<<__PRETTY_FUNCTION__<<endl;
        }
private:
string name;
};

class AB : public A, public B{

};

int main(){
        AB a;
}

Ответы на вопрос(1)

Ваш ответ на вопрос