非內建型別的成員變數最好都用初始化列表初始化,因為在建構函式執行前,會先初始化這個物件內部的成員,若是有初始化列表,則按初始化列表來初始化,若是沒有,則自動執行成員的預設建構函式。看下面的例子
程式的輸出是#include
class a
a(int x)
};class b
b(const a &a)
};int main()
可以看到先構造a(1),然後在構造b時,由於b內部有成員a,於是要先初始化a,於是呼叫a的預設建構函式。但實際上這一步是多餘的,相當於b.a被賦值了兩次。wd@ub-linux:effective_cpp$ ./a.out
a constructor
with
para
default
constructor
bconstructor
with
par
在看下面的寫法
這次的輸出是#include
class a
a(int x)
a(const a& a)
};class b
b(const a &a):a(a)
};int main()
b的建構函式中沒有了賦值操作,但是把b.a的初始化放在了初始化列表裡面,這樣b.a就只初始化了一次。可以說這一操作是非常重要的,在一些比較大的類中,可以節省很多不必要的賦值操作。a constructor
with
para
copy
constructor
bconstructor
with
par
Effective cpp 讀書筆記1
本週內,每天更新。c 的特性主要 四個大方面 四個次語言 結論 壞處用const取代 用enum取代 用inline取代 結論 注意 const成員函式 bitwise constness 編譯器就是這種 和logical constness 在const和non const成員函式中避免重複 結論...
Effective cpp 讀書筆記2
c 默默編寫的函式 程式設計師沒有宣告的前提下 default建構函式 copy建構函式 copy assignment操作符 default析構函式 非virtual 編譯器產出的函式都是public的 關於建構函式,如果使用者定義了至少一種,就不會有預設建構函式 結論 自行宣告和定義 將對應的函...
Effective cpp 讀書筆記5
切記將成員變數宣告為private。這可賦予客戶訪問資料的一致性 可細微劃分訪問控制 允諾約束條件或的保證,並提供class作者以充分的實現彈性 protected並不比public更具封裝性 這樣做可以增加封裝性 包裹彈性和技能擴充性 目的是為了保證函式一致性。典型例子是過載類的運算子operat...