2010-03-17 95 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并断言。发布期间也没有开销。

相关问题