是否有任何C++工具可以检测到static_cast,dynamic_cast和reinterpret_cast的误用?

chr*_*451 3 c++ static-analysis casting dynamic-analysis downcast

以下问题的答案描述的推荐用法static_cast,dynamic_cast以及reinterpret_cast在C++:

什么时候应该使用static_cast,dynamic_cast,const_cast和reinterpret_cast?

你知道有哪些工具可以用来检测这类演员的滥用吗?像PC-Lint或Coverity Static Analysis这样的静态分析工具会这样做吗?

提示这个问题的特殊情况是不适当地使用static_cast向下转换指针,编译器没有警告.我想用工具检测这种情况,而不是假设开发人员永远不会犯这个错误.

Sim*_*ker 5

鉴于没有可靠的方法来告诉指针在编译时指向哪种类型,这在编译时是一个非常难以解决的问题.

最简单的方法是在运行时执行catch,使用宏"safe_cast",它在调试中使用assert和发布中的static_cast编译为dynamic_cast.

现在,在调试期间,如果转换不合适,动态转换将返回NULL并断言.在发布期间也没有开销.