2010-03-17 104 views
3

到以下問題的答案描述static_castdynamic_castreinterpret_cast推薦使用在C++:是否有任何C++工具檢測到static_cast,dynamic_cast和reinterpret_cast的濫用?

When should static_cast, dynamic_cast, const_cast and reinterpret_cast be used?

你知道的,可用於檢測這類演員的誤用任何工具?像PC-Lint或Coverity Static Analysis這樣的靜態分析工具能做到這一點嗎?

提示此問題的特定情況是使用static_cast不恰當地使用downcast指針,編譯器不警告。我想用工具來檢測這種情況,而不是假設開發者永遠不會犯這個錯誤。

+2

使用static_cast向下轉換指針很好,如果您知道它是正在轉換的正確子類,建議使用。 – 2010-03-17 21:16:04

+0

這是static_cast的適當使用。我正在尋找一種能夠檢測到不適當使用的工具(這是我投射到的錯誤的子類)。 – chrisp451 2010-03-17 21:27:11

+1

問題在於'static_cast'在代碼中查看可用信息的特定情況(您可以從設計中的不變量知道即使代碼中不存在該信息,該轉換也是正確的) – 2010-03-17 22:45:19

回答

5

鑑於在編譯時沒有可靠的方法來告訴指針指向的是什麼類型,這在編譯時遇到了相當困難的問題。

最簡單的方法是在運行時使用宏「safe_cast」編譯爲dynamic_cast,其中包含調試中的斷言和發佈中的static_cast。

現在,在調試過程中,如果轉換不合適,動態轉換將返回NULL並斷言。發佈期間也沒有開銷。

相關問題