2

考虑代码片段

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

为什么内联成员初始化列表有效,而普通初始化无效?

4

1 回答 1

2

请注意,这i=x;是一项任务。如果您不通过成员初始化器列表对其进行初始化,i将尝试默认初始化,然后在构造函数的主体中分配。

但作为 const 变量,i不能默认初始化(或赋值)。因此必须在成员初始化器列表中指定它才能进行初始化。

成员初始化器列表是可以指定这些对象的非默认初始化的地方。对于不能默认初始化的成员,例如引用和 const 限定类型的成员,必须指定成员初始化器。

于 2017-03-13T07:19:35.803 回答