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

C++ RTTI 詳解:dynamic_cast、typeid 與 type_info

     編輯:關於C++

RTTI (Run-Time Type Information) 簡介

C++ 提供運行時類型識別機制,允許通過基類指針/引用檢查對象實際派生類型。三大核心組件:

  1. dynamic_cast:安全向下轉型。dynamic_cast(base_ptr) 若轉換成功返回派生類指針,否則返回 nullptr (指針版本) 或拋出 bad_cast (引用版本)。要求基類含虛函數 (多態類型)。
  2. typeid:返回 const type_info&,描述類型信息。typeid(*ptr) 用於多態對象獲取動態類型;typeid(Type) 獲取靜態類型。支援 == 和 != 比較。
  3. type_info:<typeinfo> 中定義的類,封裝類型名稱 (name())、比較運算符、before() (用於類型順序,如 map 鍵)。

使用示例

class Base { virtual ~Base() {} };
class Derived : public Base {};

Base* p = new Derived();
if (Derived* d = dynamic_cast(p)) { /* 成功 */ }
if (typeid(*p) == typeid(Derived)) { /* 同類型 */ }
cout << typeid(*p).name(); // 輸出類型名 (實現相關)

注意事項

  • RTTI 可能增加編譯體積與運行開銷,嵌入式系統常禁用 (-fno-rtti)。
  • dynamic_cast 要求源類型為多態類型 (至少一個虛函數),否則編譯錯誤。
  • typeid 不拋異常,但對空指針解引用未定義行為。

應用場景

  • 插件系統、序列化、異構容器中對象類型分發。
  • 調試與日誌記錄對象動態類型。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved