亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

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++遠征之封裝篇(上)
  • 參與學習       103391    人
  • 解答問題       732    個

封裝--面向對象的基石,本教程力求幫助小伙伴們即學即會

進入課程
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號