C++ 是否有理由在成员初始值设定项之前调用基类构造函数,除非这是一种好的做法?

C++ 是否有理由在成员初始值设定项之前调用基类构造函数,除非这是一种好的做法?,c++,C++,鉴于类型 struct A { A(int); }; struct B : A { int x; B(); }; 在初始化x之前,是否有任何有效的理由希望调用A的构造函数?我所说的影响力是指对节目行为的影响,而不是“这样做是好的/常见的做法” 似乎没有禁止或解释这一点,因此我假设对mem初始值设定项列表进行重新排序是定义良好的。A的初始化首先发生,不管发生什么。关于这一点的警告只是为了避免意外地依赖列表中成员的顺序。例如,x(5),A(x)将不起作用,因为发生A

鉴于类型

struct A
{ 
    A(int);
};

struct B : A 
{ 
    int x;
    B();
};
在初始化
x
之前,是否有任何有效的理由希望调用
A
的构造函数?我所说的影响力是指对节目行为的影响,而不是“这样做是好的/常见的做法”


似乎没有禁止或解释这一点,因此我假设对mem初始值设定项列表进行重新排序是定义良好的。

A
的初始化首先发生,不管发生什么。关于这一点的警告只是为了避免意外地依赖列表中成员的顺序。例如,
x(5),A(x)
将不起作用,因为发生
A(x)
时,
x
将被取消初始化。这是否回答了您的问题@FrançoisAndrieux您的意思是基类将首先初始化吗?然后,随后,成员变量将按声明顺序进行初始化。@JesperJuhl我想他是想指出这样的初始化是不正确的。@JesperJuhl这就是我所说的“无论发生什么,A的初始化都首先发生。”
A
是基类,它将首先被初始化。
B::B() : A(10), x(5) { }

// can this difference affect the programs behavior somehow?

B::B() : x(5), A(10) { }