C++中如何初始化类中const或引用类型的数据成员?
生活随笔
收集整理的這篇文章主要介紹了
C++中如何初始化类中const或引用类型的数据成员?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在C++中,如果沒有在構造函數初始值列表中顯示地初始化成員,則該成員將在構造函數體之前執行默認初始化。之后,再進入構造函數體{}中,隨著構造函數體一開始執行,初始化地工作實際上就完成了。
下面兩個構造函數,雖然執行后,成員變量的值都一致,但過程和效率卻不一樣。第一個構造函數,使用構造函數初始化列表,效率更高;而第二個構造函數,沒有在初始值列表中顯示地初始化,所以實際是先進行了默認初始化,然后再進入構造函數體{}中執行賦值操作。
Sales_data::Sales_data(const string &s, unsigned cnt, double price) :?bookNo(s), units_sold(cnt), revenue(cnt*price) { } Sales_data::Sales_data(const string &s, unsigned cnt, double price) {bookNo ? ? = s;units_sold = cnt;revenue ? ?= cnt * price; }
如果成員是const或者引用的話,必須將其初始化。類似的,當成員屬于某種類類型而且該類沒有定義默認構造函數時,必須將這個成員初始化。我們初始化const或者引用類型的數據成員的唯一機會就是通過構造函數初始值。
?
構造函數初始值中每個成員只能出現一次。構造函數初始值列表只說明用于初始化成員的值,而不限定初始化的具體執行順序。成員的初始化順序與它們在類定義中的出現順序一致。構造函數初始值列表中初始值的前后位置關系不會影響實際的初始化順序。
?
總結
以上是生活随笔為你收集整理的C++中如何初始化类中const或引用类型的数据成员?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pygame用精灵编组的问题的猜想和验证
- 下一篇: 关于合成的拷贝控制成员的一点问题