在某些情况下,我们必须使用初始化程序列表来初始化成员,比如当我们有const数据成员时。那么,是什么使初始化程序列表能够初始化成员,而构造函数本身却不能呢?
发布于 2022-06-20 20:43:46
初始化程序列表总是初始化所有成员。句号。未列出的任何成员都会被调用其默认构造函数。如果在构造函数体中重新分配给它们,那么(原则上)您只分配了一个额外的对象,然后立即丢弃。
在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
}
}https://stackoverflow.com/questions/72692700
复制相似问题