C++成員初始化列表
文章轉自: 公眾號:Coder梁(ID:Coder_LT)
除瞭可以使用構造函數Classy::Classy(int n, int m): mem1(n), mem2(0), mem3(n*m+2) {
…
};類成員進行初始化之外,C++還提供瞭另外一種初始化的方法,叫做成員初始化列表。
我們假設Classy
是一個類,而mem1
,mem2
和mem3
都是這個類的數據成員,那麼類構造函數可以寫成:
Classy::Classy(int n, int m): mem1(n), mem2(0), mem3(n*m+2) { ... };
上述代碼將mem1
初始化為n,將mem2初始化為瞭0,mem3
初始化成瞭n*m+2。這些初始化工作是對象創建是完成的,並且在執行花括號中的內容之前。
有這麼幾點需要註意:
- 這種格式隻能用於構造函數
- 必須用這種格式初始化非靜態const數據成員(C++11之前)
- 必須用這種格式初始化引用數據成員
數據成員被初始化的順序和它們在類中定義的順序相同,和初始化列表中的排列順序無關。
C++11的類內初始化:
C++11當中允許我們直接對成員變量進行賦值:
class Classy { int mem1 = 10; const int mem2 = 20; };
這和在構造函數當中使用成員初始化列表等價:
Classy::Classy() : mem1(0), mem2(20) {...}
我們在類當中直接初始化之後,我們也可以在成員初始化列表當中進行覆蓋:
Classy::Classy(int n) : mem1(n) {...}
在這種情況下,mem1的值會被替換成n。
到此這篇關於C++成員初始化列表的文章就介紹到這瞭,更多相關C++成員初始化列表內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!