| 風格 | 語法 | 評價 |
|---|---|---|
| C 風格 | (T)expr | 功能過強(含 const_cast/reinterpret_cast),易濫用、難搜尋 |
| 函數風格 | T(expr) | 本質同 C 風格,僅括號位置不同 |
| C++ 風格 | static_cast, dynamic_cast, const_cast, reinterpret_cast | 語義明確、編譯器檢查更嚴、代碼中易識別 |
const_cast:移除 const/volatile,唯一能做此事。dynamic_cast:安全向下轉型(基類指針/引用 → 派生類),需 RTTI,有運行時代價。reinterpret_cast:低級位模式重新解釋(如指針 ↔ 整數),不可移植,極度危險。static_cast:隱式轉換的逆操作(如 int→double、void*→T*、非 const → const),不能 移除 const。dynamic_cast 性能陷阱:逐級字符串比較類名,深繼承鏈極慢。vector 替代 vector + dynamic_cast。basePtr->virtualFunc() 替代轉型後調用。Derived* getDerived(Base* p) { return dynamic_cast(p); } 。