首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

《深度探索 C++ 物件模型》讀書筆記(7):Template 具現化、名稱決議與 RTTI

     編輯:關於C++

Template 具現化行為

  • 成員僅透過具現化實體存取:Point<float>::Status s; 合法,Point::Status s; 錯誤。
  • 指標/參考不觸發完整具現化:Point<float> *ptr = 0; 無需具現化成員;Point<float> &ref = 0; 會產生臨時物件觸發具現化。
  • 成員函數**僅在使用時**才具現化:節省時空、支援部分型別不支援的操作。

錯誤報告延遲

涉及 template 參數的型別檢查延遲至具現化時:

template <class T> class Mumble {
    Mumble(T t = 1024) : _t(t) { if (tt != t) throw ex; }
    T tt;
};
Mumble<int> mi;        // OK
Mumble<int*> pmi;     // 錯誤:1024 不能指定給指標

名稱決議兩階段

  • 定義階段:非相依名稱 (如 foo(_val),_val 為 int) 在定義時決議。
  • 具現化階段:相依名稱 (如 foo(_member),_member 型別取決於 T) 在具現化時決議。

Member Function 具現化策略

手動顯式具現化至獨立目標檔為唯一高效做法。

RTTI 與 dynamic_cast

  • dynamic_cast 執行期檢查型別,安全轉型回傳指標,失敗回傳 0。
  • 成本:取得物件 type_info (vptr[0])、比較型別描述子。
  • 參考版本失敗拋 bad_cast 異常。
  • typeid 可先檢查型別再轉型。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved