繁体   English   中英

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

[英]Are there any C++ tools that detect misuse of static_cast, dynamic_cast, and reinterpret_cast?

以下问题的答案描述了C ++中static_castdynamic_castreinterpret_cast的推荐用法:

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

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

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

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

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

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

Visual Studio对其中一些警告。 例如,C4946。 但是,默认情况下它们大部分都是关闭的。

http://msdn.microsoft.com/en-us/library/23k5d385.aspx

Boost提供了polymorphic_pointer_downcast()和polymorphic_downcast()函数,它们的作用类似于static_cast,但如果等效的dynamic_cast失败,它将断言(通常仅在调试版本中)。

有关详细信息,请参阅http://www.boost.org/doc/libs/1_61_0/libs/conversion/cast.htm

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM