建構函式初始化列表和初始化函式

2021-09-26 09:10:48 字數 650 閱讀 9152

其實並沒有所謂的初始化函式的概念,本文中的初始化函式只是說明在函式體內進行賦值。而初始化列表才是真正意義上的物件初始化。

使用初始化列表效率會高一點。c++規定,物件的成員變數的初始化動作發生在進入建構函式本體之前。在建構函式體內只是賦值,並不是初始化。

請看下面這個栗子:

class base{

public:

base(){

cout<<"default constructor. "cout<<"assign constructor."《當用初始化函式方式時,執行結果為:

constructor 1.

delault constructor.

assign constructor.

當用初始化列表方式時,執行結果為:

constructor 1.

copy constructor.

這是因為編譯器總是確保所有的成員物件在建構函式體執行之前初始化,所以當有類型別的成員資料時,在進入建構函式體之前已經完成第一次構造。建構函式使用初始化函式時,在賦值建構函式前,b1 已經自己呼叫預設建構函式完成第一次構造,之後再通過賦值建構函式進行第二次構造。而通過初始化列表方式構造則直接呼叫複製建構函式,比通過初始化函式少呼叫一次建構函式。

建構函式初始化列表

建構函式初始化列表以乙個冒號開始,接著是以逗號分隔的資料成員列表,每個資料成員後面跟乙個放在括號中的初始化式。例如 example example ival 0 dval 0.0 ival 和dval 是類的兩個資料成員 上面的例子和下面不用初始化列表的建構函式看似沒什麼區別 example exa...

建構函式初始化列表

c 程式語言中有很多比較重要的概念值得我們去深入 比如今天為大家介紹的有關c 建構函式的相關概念。這一方面的知識在實際程式設計中就是乙個比較重要的應用技術。希望能個大家可以從中學到一些知識。c 建構函式初始化列表以乙個冒號開始,接著是以逗號分隔的資料成員列表,每個資料成員後面跟乙個放在括號中的初始化...

建構函式初始化列表

class object private int v1,v2 看看願意是 先初始化v2為5,然後初始化v1為 3 倍的 v2 但是結果卻是奇葩的,這個是因為建構函式的初始化列表遵循的原則是先初始化父類 父類也是這個原則,那麼就相當於遞迴 然後初始化本類的成員,最後執行建構函式的函式體 而初始化本類的...