考虑代码片段
class Test{
const int i;
public:
// Test(int x):i(x){} This works
Test(int x){
i=x;
} //this doesn't work
为什么内联成员初始化列表有效,而普通初始化无效?
考虑代码片段
class Test{
const int i;
public:
// Test(int x):i(x){} This works
Test(int x){
i=x;
} //this doesn't work
为什么内联成员初始化列表有效,而普通初始化无效?
请注意,这i=x;
是一项任务。如果您不通过成员初始化器列表对其进行初始化,i
将尝试默认初始化,然后在构造函数的主体中分配。
但作为 const 变量,i
不能默认初始化(或赋值)。因此必须在成员初始化器列表中指定它才能进行初始化。
成员初始化器列表是可以指定这些对象的非默认初始化的地方。对于不能默认初始化的成员,例如引用和 const 限定类型的成员,必须指定成员初始化器。