條款26:盡可能的延後變數定義式出現的時間
盡可能後的定量定義式不僅能夠避免構造非必要物件,還可以避免無意義的預設構造行為,更深層次的說,以具明顯意義之初值將變數初始化,還可以附帶說明變數的目的。
條款27:盡量少做轉型動作
c++中的四種新式轉型:
const_cast(expression) 去除const的屬性轉化
dynamic_cast(expression)支援執行時識別指標或引用所指向的物件
reinterpret_cast(experssion)運算元的位模式提供較低層次的重新解釋
static_cast(experssion)進行強迫隱性轉換
條款28:避免返回handle指向物件內部成分
即避免返回引用、指標、迭代器指向物件內部。
條款29 :為異常安全努力是值得的
條款30 透徹了解inlining的裡裡外外
將大多數inlining限制在小型、被頻繁呼叫的函式身上,這可使日後的挑除錯過程和二進位制公升級更容易,也可使潛在**的膨脹問題最小化,使程式的速度提公升最大化。
條款31: 將檔案間的編譯存在關係降到最低
支援編譯最小化的一般構想是 相依於宣告式,不要想相依於定義式
條款32 確定你的public繼承塑模出is-a關係
public 意味著is-a。 適用於base class身上的每一件事也都是適用於derived class 身上,因為每乙個derived class物件也都是乙個base class物件。
條款33 避免遮掩繼承而來的名稱
int x;
void f()
class base;
class derived: public base;
//呼叫過程中
derived d;
int x;
d.f1();// 呼叫derived 中的f1
d.f1(x);//錯誤 derived 遮住了base中的f1
d.f2();// 沒問題
d.f3();//沒問題
d.f3(x)//錯誤 遮住了base中f3
解決方法: 使用using 宣告達成目標
在derived中加入宣告
using base::f1;
using base::f3;
則上述中錯誤的可以正常訪問
總結:為了讓被遮蔽的名稱重見天日,可以使用using 宣告式
條款34 區分介面繼承和實現繼承
介面可以直接認為是宣告,而繼承就是實現。
條款35:考慮virtual以外的選擇
// template method模式 通過public中的non-virtual函式呼叫private 的virtual函式
class game
private:
virtual int dohealth() const
};
strategy設計模式可以替換virtual函式。
條款36 絕不重新定義繼承而來的non-virtual函式
條款37 絕不重新定義繼承而來的預設引數值
virtua函式是動態繫結,而預設引數值確實靜態繫結。
條款38 通過復合塑模出has-a(有乙個)或 根據某物實現出
條款39 明智而慎重的使用private繼承
條款40 明智而慎重的使用多重繼承
Effective C 閱讀筆記
2019年九月四日 緒論 explicit的用法 用於建構函式,防止出現隱式型別轉換,例子 include using namespace std class object object void dosomething object b int main int argc,char const a...
Effective C 閱讀筆記(1)
關鍵字 explicit 用於告知編譯器,該建構函式可以用於完成隱式型別轉換 implicit type conversation 建議 除非有乙個很好的理由,否則將建構函式申明為 explicit!c 是乙個由多個次語言組成的語言聯邦 c 風格 物件導向的c 泛型c stl c 不同的次語言尤其各...
《effective c 》閱讀筆記 1
之前閱讀一部分 effective c 作為一本被眾多讀者所推薦的書自然有它的獨特的魅力所在。在 過一部分該書的一部分內容之後,不由的覺得該書確實是集c 精華於一身,同時還加以科普了很多相對來說在一般老式課本難以見到的語法和語句,如智慧型指標等用法,並舉出例項將該其與其他語法相對而言的優點凸顯出來。...