C 中使用初始化列表的情況

2022-03-22 01:03:14 字數 560 閱讀 3528

要理解這個問題,從概念上,我們要知道一點,那就是建構函式的執行過程會分成兩個階段:隱式或顯示的初始化階段以及一般的計算階段。計 算階段由建構函式體內的所有語句組成,在計算階段,資料成員的設定被認為是賦值,而不是初始化。

而初始化是顯式的還是隱式的,取決於是否存在初始化函式列表。隱式初始化階段按照宣告的順序依次呼叫素有基類的預設建構函式,然後是所有成員類物件的預設建構函式。

現在我們回歸主題,有了上面的基礎,我們可以繼續闡述這個問題,首先給我要使用成員初始化列表的三種情況

一,需要初始化的資料成員是類物件的情況(該類沒有預設建構函式);

二,需要初始化const資料成員;

三,需要初始化引用資料成員;

對於第一種情況,大家知道,對於類物件,初始化和賦值是不同的,賦值會帶來了很大的效能開銷。

對於第二種以及第三種情況,從const和引用的語法上來講,他們在使用之前必須要被初始化。

另外,類中每個成員在成員初始化表中只能出現一次,初始化的順序不是由名字在初始化表中順序決定,而是由成員在類中被宣告的順序

決定。但是初始化表中的成員,總是在建構函式體內成員的賦值之前被初始化。

必須使用 初始化列表 初始化資料成員的情況

類物件的構造順序是這樣的 1.分配記憶體,呼叫建構函式時,隱式 顯示的初始化各資料成員 2.進入建構函式後在建構函式中執行一般賦值與計算。使用初始化列表有兩個原因 原因1.必須這樣做 c primer 中提到在以下三種情況下需要使用初始化成員列表 情況一 需要初始化的資料成員是物件的情況 這裡包含了...

C 只用初始化列表初始化變數的幾種情況

有幾個容易混淆的地方 1 const 的變數只能通過建構函式的初始化列表進行初始化 貌似在c 11中可以正常編譯 2 static 的變數只能通過在類外重新定義進行初始化 3 static const 變數 只能通過在類中直接用 進行賦值。include using namespace std cl...

C 使用初始化列表初始化資料成員的三種情況

類物件的構造順序是這樣的 1.分配記憶體,呼叫建構函式時,隱式 顯示的初始化各資料成員 建構函式列表的初始化方式不是按照列表的的順序,而是按照變數宣告的順序同時初始化顯隱資料成員 2.進入建構函式後在建構函式中執行一般賦值與計算。使用初始化列表有兩個原因 原因1.必須這樣做 c primer 中提到...