const成员可以在c ++ construtor中初始化吗?

时间:2017-12-26 10:29:29

标签: c++ initialization const

我阅读了代码段here。请搜索“Const类数据成员”以进入该部分。代码如下:

class Test
{
   const int i;
   public:
   Test (int x)
   {
     i=x;
   }
};

int main()
{
 Test t(10);
 Test s(20);
}

我使用VS2013警告我它不正确。据我所知,const成员变量只能通过初始化列表初始化。 STH。像:

Test (int x):i(x){}

较新的C ++标准更新是否支持(如果是这样,更改听起来合理,在函数体中初始化似乎没有区别,对吧?)?或者文件出错(我认为不会犯这样的错误)。

2 个答案:

答案 0 :(得分:2)

规则没有改变(来自C ++ 98)。

请注意,构造函数体内的mLineChart.getAxisRight().setEnabled(false); 不是初始化,而是赋值;他们是不同的东西。对于i=x;成员,他们只能是initialized

  

对于无法进行默认初始化的成员,例如引用成员和const限定类型,必须指定成员初始值设定项。

e.g。 const

但无法分配,

Test (int x):i(x){}

答案 1 :(得分:0)

是的,const成员只能初始化(通过使用初始化列表)而不是分配给,如代码段中所示。不,更新的C ++标准没有更新它以支持构造函数中的赋值。

包含该代码段的问题教程是错误的。我建议不要阅读这些教程,因为它们经常会出现微妙(而不是那么微妙)的错误。