成員初始化列表細說

2021-10-07 09:32:16 字數 1441 閱讀 7582

一:何時必須使用初始化列表

#include

using

namespace std;

class

base

~base()

};classx~

x()}

;classa:

public base~a

()};

intmain

(void

)//總結:必須用初始化列表的4種情形

/* a:成員有引用

b:成員是const型別

c:類中的成員變數有類型別,並且這個類型別沒有預設建構函式(也就是它的建構函式是帶有引數的)

d:類繼承了某個類,並且這個類(父類)的建構函式是帶引數的

*/

二:使用初始化列表的優勢

除了上述的必須使用初始化列表的情形的化,其它情況下使用初始化列表的方式主要是為了提高程式的執行效率,,通過乙個例子來看看使用初始化列表和不使用初始化列表的情況吧。

#include

#include

using

namespace std;

classx~

x()x

(const x& p)

x&operator=(

const x&

)public

:int m_i;};

classt~

t()}

;int

main

(void

)

執行結果:

再來看:

發現少了一些步驟了吧?

由於在不使用初始化列表的情況下,編譯器執行程式時,還會生成臨時物件,,,,所以來說還是使用初始化列表有優勢。

但是這種優勢對於一般的內建型別,比如int等等就不太明顯,對於類型別來說,明顯可就大了。

三:成員初始化列表細節探秘

成員初始化列表

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

成員初始化列表

任乙個物件的建立都要呼叫建構函式,而在建構函式中一般要給物件屬性賦值。成員初始化列表 member initialize list 是建構函式中特有的語法,用以簡化對物件屬性的賦值。其用法如下 class myclass 以上 相當於 class myclass 用成員初始化列表的語法來表述很顯然 ...

成員初始化列表

從概念上講,可以認為建構函式分兩個階段執行 1 初始化階段 2 普通的計算階段。計算階段由建構函式函式體中的所有語句組成。不管成員是否在建構函式初始化列表中顯式初始化,類型別的資料成員總是在初始化階段初始化。初始化發生在計算階段開始之前。在建構函式初始化列表中沒有顯式提及的每個成員,使用與初始化變數...