鉴于以下内容:
class D { ... };
struct C
{
D d;
int a;
C() : a(5) {}
};
编译器会生成初始化C::d
的代码,但d
之前或之后是否a
初始化了?或者它是实现定义的?还是未定义?
我问,因为我看到至少有一个编译器说我的初始化程序与数据成员的顺序不匹配。
答案 0 :(得分:6)
初始化的顺序是声明的顺序。这意味着'd'将在示例中的'a'之前初始化。即使您在初始化列表中指定了其他顺序。在这种情况下,大多数编译器都会打印警告。