在某些情况下,必须使用初始化列表来初始化成员,例如当我们有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
}
}