构造函数初始化列表背后的实际机制是什么?



在某些情况下,必须使用初始化列表来初始化成员,例如当我们有const数据成员时。那么,是什么使得初始化列表能够初始化成员,而构造函数本身却不能呢?

初始化列表总是初始化所有成员。句号。未列出的任何成员都将调用其默认构造函数。如果您在构造函数体中对它们重新赋值,那么(原则上)您只是分配了一个额外的对象,然后立即丢弃了一个。

const的特殊情况下,const变量不能重新赋值给。将初始化的const变量设置为另一个值是不正确的。它只能第一次初始化,不能重新赋值。

struct Foo {
const int x;
int y;
int z;
Foo() : x(0), y(0) {
// At this point, all three variables (even z) have been initialized.
y = 0; // Okay, reassignment is fine but wasteful
z = 0; // Same as above
x = 0; // Error! Can't reassign to a const
}
}

最新更新