勵志

勵志人生知識庫

dynamic_cast用法

`dynamic_cast`是C++中的一個類型轉換操作符,主要用於類層次間的上行轉換和下行轉換,還可以用於類之間的交叉轉換。以下是詳細信息:

上行轉換(將基類指針或引用轉換為派生類指針或引用)時,`dynamic_cast`與`static_cast`的效果相同。

在進行下行轉換(將基類指針或引用轉換為派生類指針或引用)時,`dynamic_cast`具有類型檢查的功能,比`static_cast`更安全。如果轉換失敗,例如基類指針實際上不指向派生類對象,那麼對於指針轉換會返回空指針,對於引用轉換則會拋出`std::bad_cast`異常。

使用`dynamic_cast`時需要滿足以下條件:

要進行轉換的類型必須存在繼承關係。

轉換源類型必須是多態類型,即其至少包含一個虛函式(通常是將基類聲明為虛基類)。

指針或引用的實際類型必須與目標類型相同或者是其公有派生類型。

需要注意的是,`dynamic_cast`在將父類cast到子類時,父類必須要有虛函式,否則編譯器會報錯。此外,編譯器需要啟用運行時類型信息(RTTI),大多數現代C++編譯器默認啟用RTTI,但有些情況下可能需要顯式地開啟它。