當沒有檢查返回值爲NULL
時,是否有任何目的使用dynamic_cast
?如果我正在查看代碼庫,並且將空值檢查從返回值中省略,那麼使用static_cast
可能會如此嗎?使用dynamic_cast而不用空值檢查
A *a = dynamic_cast<A *>(b);
foo(*a); //might as well have used a static_cast
我讀過所有的谷歌對此事得到,它似乎是檢查空是唯一的原因,但我還沒有看到任何人站出來說「不dynamic_cast的空檢查浪費週期(RTTI可能導致代碼膨脹)。「
編輯:如果在類型之間存在虛擬繼承,那麼static_cast
將失敗,其中dynamic_cast
不會。就我而言,情況並非如此。
如果new_type是指向某個類D的指針或引用,並且表達式的類型是指向其非虛擬基B的指針或引用,則static_cast將執行向下轉換。 **如果B不明確,不可訪問,或虛擬基地(或虛擬基地的基地)爲D,則這種向下轉換是不合格的**。這種static_cast不進行運行時檢查,以確保對象的運行時類型實際上是D **,並且只有在通過其他方式保證此前提條件時纔可以安全使用,例如實現靜態多態性。[來源](http://en.cppreference.com/w/cpp/language/static_cast) –