考虑代码段
class Test{
const int i;
public:
// Test(int x):i(x){} This works
Test(int x){
i=x;
} //this doesn't work
为什么内联成员初始化列表在正常初始化不起作用时有效?
答案 0 :(得分:1)
请注意,i=x;
是一项任务。如果您没有通过成员初始化列表初始化它,i
将尝试默认初始化,然后在构造函数体中分配。
但作为const变量,i
不能默认初始化(或分配)。因此必须在member intializer list中指定初始化。
成员初始值设定项列表是可以指定这些对象的非默认初始化的位置。对于无法进行默认初始化的成员,例如引用成员和const限定类型,必须指定成员初始值设定项。