C 何時要使用成員初始化列表

2021-05-22 21:37:29 字數 548 閱讀 2466

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

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

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

一,需要初始化的資料成員是類物件的情況;

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

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

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

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

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

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

何時必須使用初始化列表

與其他函式不同,建構函式除了有名字,引數列表和函式體之外,還可以有初始化列表,初始化列表以冒號開頭,後跟一系列以逗號分隔的初始化字段。在c 中,struct和class的唯一區別是預設的訪問性不同,而這裡我們不考慮訪問性的問題,所以下面的 都以struct來演示。struct foo 初始化列表 建...

C 成員初始化列表

類物件的構造順序是這樣的 1.分配記憶體,呼叫建構函式時,隱式 顯示的初始化各資料成員 初始化階段可以是顯式的或隱式的,取決於是否存在成員初始化表。隱式初始化階段按照宣告的順序依次呼叫所有基類的預設建構函式,然後是所有成員類物件的預設建構函式。2.進入建構函式後在建構函式中執行一般計算 計算階段由建...

C 成員初始化列表

c 初始化類的成員,不僅可以用constructor完成,也可以用初始化類成員列表來完成。有些情況只能用第一種,而且通常第一種效率高些。兩者區別 1,普通變數編譯器會預設替你初始化。它們既能初始化,也能被賦值,而常量const按照其意思只能被初始化,不能賦值。所有const member只能用成員初...