C++ 提供運行時類型識別機制,允許通過基類指針/引用檢查對象實際派生類型。三大核心組件:
dynamic_cast(base_ptr) 若轉換成功返回派生類指針,否則返回 nullptr (指針版本) 或拋出 bad_cast (引用版本)。要求基類含虛函數 (多態類型)。const type_info&,描述類型信息。typeid(*ptr) 用於多態對象獲取動態類型;typeid(Type) 獲取靜態類型。支援 == 和 != 比較。<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(); // 輸出類型名 (實現相關)
-fno-rtti)。dynamic_cast 要求源類型為多態類型 (至少一個虛函數),否則編譯錯誤。typeid 不拋異常,但對空指針解引用未定義行為。