建構函式之顯式初始化與賦值

2021-07-25 18:39:38 字數 749 閱讀 5933

大部分程式設計師寫建構函式時是這樣的:

class classa

;classa::classa()

這一類建構函式包括了初始化和賦值兩個步驟,在執行建構函式函式體內語句前,已經隱式呼叫了預設建構函式對變數進行初始化,函式體內語句其實是進行了一次賦值。

更規範的是使用初始化列表進行初始化,即顯式初始化。

classa

::classa()

:a(1),b(2)

使用預設建構函式時,初始化成員的規則與初始化變數規則相同,即具有類型別的成員使用預設各自的預設建構函式來初始化,內建和復合型別的全域性變數初始化為0,內建和復合型別的區域性作用域的變數則不初始化。

故而使用顯示初始化是有好處的。第一是效率問題,因為要額外賦值一次,在函式體內賦值效率相對較低,當然如果你不在乎這一點點效率,我們還有第二條;第二條如果沒有在函式體內給類成員提供初始化式,編譯器會使用成員型別的預設建構函式;如果那個類沒有預設建構函式,則初始化失敗。另外const或引用型別的成員,無法賦值,只能在初始化列表中初始化。譬如:

class classa

;classa::classa(int b)

正確初始化方式為

classa::classa(int b):i(b),j(b),k(i)

以上參考自《c++primer》

C 建構函式初始化列表與賦值

c 類中成員變數的初始化有兩種方式 建構函式初始化列表和建構函式體內賦值。下面看看兩種方式有何不同。成員變數初始化的順序是按照在那種定義的順序。1 內部資料型別 char,int 指標等 class animal animal int weight,int height b函式體內初始化 priva...

C 建構函式初始化列表與賦值

c 類中成員變數的初始化有兩種方式 建構函式初始化列表和建構函式體內賦值。下面看看兩種方式有何不同。成員變數初始化的順序是按照在那種定義的順序。1 內部資料型別 char,int 指標等 class animal animal int weight,int height b函式體內初始化 priva...

C 建構函式初始化列表與賦值

初始化和賦值對內建型別的成員沒有什麼大的區別,像任乙個建構函式都可以。但有的時候必須用帶有初始化列表的建構函式 1 成員型別是沒有預設建構函式的類。若沒有提供顯式初始化時,則編譯器隱式使用成員型別的預設建構函式,若類沒有預設建構函式,則編譯器嘗試使用預設建構函式將會失敗。2 const成員或引用型別...