非內建型別的成員變數最好都用初始化列表初始化,因為在建構函式執行前,會先初始化這個物件內部的成員,若是有初始化列表,則按初始化列表來初始化,若是沒有,則自動執行成員的預設建構函式。看下面的例子
#include
class a
a(int x)
};class b
b(const a &a)
};int main()
程式的輸出是
wd@ub-linux:effective_cpp$ ./a.out
a constructor
with
para
default
constructor
bconstructor
with
par
可以看到先構造a(1),然後在構造b時,由於b內部有成員a,於是要先初始化a,於是呼叫a的預設建構函式。但實際上這一步是多餘的,相當於b.a被賦值了兩次。
在看下面的寫法
#include
class a
a(int x)
a(const a& a)
};class b
b(const a &a):a(a)
};int main()
這次的輸出是
a constructor
with
para
copy
constructor
bconstructor
with
par
b的建構函式中沒有了賦值操作,但是把b.a的初始化放在了初始化列表裡面,這樣b.a就只初始化了一次。可以說這一操作是非常重要的,在一些比較大的類中,可以節省很多不必要的賦值操作。 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...