2014-05-02 47 views
0

儘管事實上dynamic_cast返回0如果正在處理的指針是不兼容的類型,爲什麼你會避免使用dynamic_castC++中dynamic_cast有什麼缺點?

+0

因爲如果給出引用它會引發錯誤。 –

回答

6

它採用非零運行時。就是這樣。 C-casts和它們的C++計數器部分如:reinterpretstatic是0開銷,因爲它們在編譯期間執行。

對於一些很重要的部分,他們確實需要RTTI,這也引入了一些開銷,例如代碼大小,因爲編譯器必須將類型信息包含到二進制文件中,這通常不會完成。應該注意的是,這可能是編譯器中的非標準選項。

從維基也與此有關注:「在原來的C++設計,Bjarne的Stroustrup的不包括運行時類型信息,因爲他認爲這種機制經常被濫用。」

編輯:繼報價和評論。我不確定這是否是一個真正的缺點,我想指出,當你使用它時,你應該考慮是否真的需要它。

有些人不喜歡它,有些人會濫用它。

+0

它需要涉及的類是多態的。 – Angew

+0

不要忘記'static_cast'。 – Chnossos

+0

這是一個你沒有很好地使用多態的標誌。 – juanchopanza

2

運行時開銷:需要

  • 更多的內存來存儲RTTI(見link)。
  • 類型必須在運行時檢查。

設計問題:

  • 參與類型必須是多態。
  • 通常是代碼中出現其他錯誤的跡象;你爲什麼需要檢查?