存在中间 class 而不执行参数化基础 class 构造函数

Existence of intermediate class without executing the parameterized base class constructor

我的代码:

class Parent
{
public: Parent() { cout << "Default Parent" << endl; }
        Parent(int x) { cout << "Parameterized Parent" << endl; }
};
class Child1: virtual public Parent
{
public: Child1() :Parent(10) { cout << "Default Child1" << endl; }
};
class Child2: virtual public Parent
{
public: Child2() :Parent(10) { cout << "Default Child1" << endl; }
};
class GrandChild: public Child1, public Child2
{
public:
    GrandChild() { cout << "Default GrandChild" << endl; }
};
int main()
{
    GrandChild G;
    return 0;
}

输出:

default Parent
default Child1
default Child2
default GrandChild

我知道这里最派生的 class 调用 Parent class 默认构造函数,除非另有说明。

但是为什么 ChildX classes 的参数化 Parent 构造函数调用从未执行过?没有 ChildX classes,GrandChild class 就不可能存在(?)。如果没有参数化调用,ChildX classes 将不会被创建(?)。

I know that here the most derived class calls the Parent class default constructor unless specified otherwise.

远不止于此。最派生的 class always 独自负责初始化虚拟基 classes。没有例外!

如果最派生的 class 的构造函数没有为虚拟基 class 指定 mem-initializer,则虚拟基 class 是默认构造的。 "intermediate" classes 是否为虚拟基 class 指定了 mem-initializers 并不重要。那些根本被忽略了。它们 在 class 是正在构建的最派生 class 时使用。

A mem-initializer where the mem-initializer-id denotes a virtual base class is ignored during execution of a constructor of any class that is not the most derived class.

(C++14 标准,[class.base.init]/7)