【Effective C++】實現
阿新 • • 發佈:2022-04-02
條款26:儘可能延後變數定義式出現時間
- 延後變數定義的時間可提高效率
條款27:儘量少做轉型動作
- Derived物件可能擁有不同的地址(當Base* 、Derived*指向該物件時)
- 儘可能使用新轉型,因為其容易辨別且對轉型型別進行了分類
條款28:避免返回handles指向物件內部成分
- 提高封裝性,減小使用者直接修改物件內部成員的可能性
1 class Point{}; 2 struct RectData 3 { 4 Point ulhc; 5 Point lrhc; 6 }; 7 class Rectangle{ 8 public: 9 Point &upperleft() const{ return pData->ulhc; };//返回了handler,使用者可更改內部成員,儘管有const 10 const Point &upperleft() const { return pData->ulhc; };//增加了限定 11 private: 12 std::shared_ptr<RectData> pData; 13 };
條款29:為“異常安全”而努力是值得的
- 見原書
條款30:inline函式
- inline可以被隱喻宣告也可以被顯示宣告(inline關鍵字)
- 將函式定義在class定義式內是inline的隱喻方式
- inline函式通常一定被置於標頭檔案內,因為大多數建置環境在編譯過程中進行inlining,而為了將一個“函式呼叫”替換為“被呼叫函式的本體”,編譯器必須知道那個函式長什麼樣子。
1 class Rectangle{ 2 public: 3 Point& upperleft() const { return pData->ulhc; };//inline的方式 4 5 private: 6 std::shared_ptr<RectData> pData; 7 }; 8 Point& Rectangle::upperleft() const { return pData->ulhc; };//非inline
條款31:將檔案間的編譯依存關係降至最低
- 見原書