C ++ список инициализатора виртуального наследования

в следующем коде:

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

class B: public virtual A
{
public:
    B(int x):A(x){}
};
class C: public virtual A
{
public:
    C(int x):A(x){}
};
class D: public B, public C
{
public:
    D(int x):B(x++), C(x++), A(x++){}
};

два вопроса:

Зачем мне добавлятьA(...) в D 'список инициализаторов?D(int x):B(x++), C(x++), A(x++){} а такжеD(int x):A(x++), B(x++), C(x++){} оба дают одинаковый результат сcout

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

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