1
工作考虑的代码片段常变量初始化只与成员初始化列表
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
不能被默认初始化(或分配)。所以必须在member intializer list中指定初始化。
成员初始化列表是可以指定这些对象的非默认初始化的地方。对于不能被默认初始化的成员,例如引用成员和常量限定类型,必须指定成员初始值设定项。
你所说的“正常初始化”不是初始化。有很多关于初始化数据成员的文章。 – juanchopanza
'i = x;'不是**初始化**。它是**作业**。你可以改变const变量的值。 – JustRufus
[未初始化的常量成员在类中]的可能重复(http://stackoverflow.com/questions/4343934/uninitialized-constant-members-in-classes) – Jonas