使用编译器生成的默认初始化的成员初始化顺序

Tom*_*ner 3 c++ initialization

鉴于以下内容:

class D { ... };

struct C
{
    D d;
    int a;
    C() : a(5) {}
};
Run Code Online (Sandbox Code Playgroud)

编译器会生成初始化的代码C::d,但它d会在之前或之后初始化a吗?或者它是实现定义的?还是未定义?

我问,因为我看到至少有一个编译器说我的初始化程序与数据成员的顺序不匹配.

neu*_*uro 6

初始化顺序是声明的顺序.这意味着'd'将在示例中的'a'之前初始化.即使您在初始化列表中指定了其他顺序.在这种情况下,大多数编译器都会打印警告.