1. 程式人生 > 其它 >【Effective C++】實現

【Effective C++】實現

條款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:將檔案間的編譯依存關係降至最低

  • 見原書