我阅读了代码段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 ++标准更新是否支持(如果是这样,更改听起来合理,在函数体中初始化似乎没有区别,对吧?)?或者文件出错(我认为不会犯这样的错误)。
答案 0 :(得分:2)
规则没有改变(来自C ++ 98)。
请注意,构造函数体内的mLineChart.getAxisRight().setEnabled(false);
不是初始化,而是赋值;他们是不同的东西。对于i=x;
成员,他们只能是initialized,
对于无法进行默认初始化的成员,例如引用成员和const限定类型,必须指定成员初始值设定项。
e.g。 const
,
但无法分配,
Test (int x):i(x){}
答案 1 :(得分:0)
是的,const
成员只能初始化(通过使用初始化列表)而不是分配给,如代码段中所示。不,更新的C ++标准没有更新它以支持构造函数中的赋值。
包含该代码段的问题教程是错误的。我建议不要阅读这些教程,因为它们经常会出现微妙(而不是那么微妙)的错误。