如果使用大括号或相等初始化器,成员变量的初始化顺序是什么?它们的初始化与代码顺序相同吗?
struct foo {
int x = 1;
int y = x + 1;
} bar;
无论编译器如何,bar.y
始终为2
吗?
是,保证y
在x
之后被初始化。非静态数据成员在类定义中始终为initialized in order of their declaration,无论它们如何初始化(通过member initializer list或default member initializer,甚至是default initialization初始化)。
3)然后,按以下顺序初始化非静态数据成员类定义中的声明。
从Scott Meyers的书,Effective C++,项目4:
C ++善变的一个方面是对象的顺序数据被初始化。此顺序始终相同:基类是在派生类之前初始化(另请参阅第12项),并且在类中,数据成员按声明。