为了账号安全,请及时绑定邮箱和手机立即绑定

const

private:
 const double m_dPi = 3.14;
这样写合法嘛?
合法的话是不是就不需要初始化列表了

正在回答

2 回答

不合法,private下是定义数据成员的,一般不赋值

0 回复 有任何疑惑可以回复我~
#1

qq_大巫师_0

为什么?我在VS2017下这样操作并没有出错啊。 private: const double m_dPi = 3.14;
2018-10-08 回复 有任何疑惑可以回复我~

类内成员变量一般有如下四种:

1、一般变量(int)

2、静态成员变量(static int)

3、常量(const int )

4、静态常量(static const int)

对应初始化方式如下:

1、一般变量可以在初始化列表里或者构造函数里初始化,不能直接初始化或者类外初始化

2、静态成员变量必须在类外初始化

3、常量必须在初始化列表里初始化

4、静态常量必须只能在定义的时候初始化(定义时直接初始化)

回到楼主的问题上,这种成员变量应该是属于第三种,也就是必须在初始化列表里初始化。

但是如果你代码这么写的话,编译也可以通过(vs2017),但是使用效果上是有区别的。

在定义时直接初始化const常量的话,用这个类实例化出来的每个对象中的const常量都是同一个数值,而如果是通过初始化列表来初始化的话,const常量的值取决于实例化时传给const常量的初始化值。

也就是说,楼主说的这种的情况的话最好使用第四种成员变量形式。

4 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之封装篇(上)
  • 参与学习       103410    人
  • 解答问题       701    个

封装--面向对象的基石,本教程力求帮助小伙伴们即学即会

进入课程
意见反馈 帮助中心 APP下载
官方微信