const
private:
const double m_dPi = 3.14;
这样写合法嘛?
合法的话是不是就不需要初始化列表了
private:
const double m_dPi = 3.14;
这样写合法嘛?
合法的话是不是就不需要初始化列表了
2018-05-13
类内成员变量一般有如下四种:
1、一般变量(int)
2、静态成员变量(static int)
3、常量(const int )
4、静态常量(static const int)
对应初始化方式如下:
1、一般变量可以在初始化列表里或者构造函数里初始化,不能直接初始化或者类外初始化
2、静态成员变量必须在类外初始化
3、常量必须在初始化列表里初始化
4、静态常量必须只能在定义的时候初始化(定义时直接初始化)
回到楼主的问题上,这种成员变量应该是属于第三种,也就是必须在初始化列表里初始化。
但是如果你代码这么写的话,编译也可以通过(vs2017),但是使用效果上是有区别的。
在定义时直接初始化const常量的话,用这个类实例化出来的每个对象中的const常量都是同一个数值,而如果是通过初始化列表来初始化的话,const常量的值取决于实例化时传给const常量的初始化值。
也就是说,楼主说的这种的情况的话最好使用第四种成员变量形式。
举报