常量变量初始化仅与成员初始化列表一起工作

时间:2017-03-13 07:15:28

标签: c++ constructor const member-initialization initialization

考虑代码段

 class Test{
  const int i;
  public:
 // Test(int x):i(x){} This works
  Test(int x){
      i=x;
  } //this doesn't work

为什么内联成员初始化列表在正常初始化不起作用时有效?

1 个答案:

答案 0 :(得分:1)

请注意,i=x;是一项任务。如果您没有通过成员初始化列表初始化它,i将尝试默认初始化,然后在构造函数体中分配。

但作为const变量,i不能默认初始化(或分配)。因此必须在member intializer list中指定初始化。

  

成员初始值设定项列表是可以指定这些对象的非默认初始化的位置。对于无法进行默认初始化的成员,例如引用成员和const限定类型,必须指定成员初始值设定项。