dynamic_cast是 C++ 中包含的四種類型轉換操作符之一,它利用運行時類型識別(RTTI)特性在運行時檢查並轉換多態對象的類型。它的主要功能包括:

  • 從基類子對象指針得到最派生對象(most-derived object)指針:dynamic_cast<void*>(expr) 。expr 是一個指向某個最派生對象中的某個基類子對象的指針,dynamic_cast 可用於從 expr 得到其所屬的最派生對象的指針。由於並不清楚最派生對象的靜態類型,因此這種情況下只能返回一個 void* 類型的指針指向最派生對象。
  • 從基類對象指針或引用得到派生類指針或引用(向下轉換,downcast):dynamic_cast<Derived*>(base_expr) 。這應該是使用 dynamic_cast 最常見的場景。此時 base_expr 是一個指向 Base 對象的指針,Derived 是一個派生自 Base 類的類型。dynamic_cast 將檢查 base_expr 指向的 Base 對象是否是某個唯一的 Derived 對象的基類子對象。如果檢查通過,dynamic_cast 將會返回這個唯一的 Derived 對象的指針。
  • 從一個類對象指針或引用得到另一個無直接關聯的類對象指針或引用(側向轉換,sidecast):dynamic_cast<Left*>(right_expr) 。此時 right_expr 是一個指向 Right 類型對象的指針,程序希望將其轉換為一個 Left 類型對象的指針,Left 和 Right 不構成繼承關係。dynamic_cast 首先通過 right_expr 指針得到其所屬的最派生對象的指針以及類型,並檢查最派生對象是否有一個唯一的類型為 Left 的基類子對象。如果檢查通過,dynamic_cast 將會返回這個唯一的 Left 對象的指針。