关于转换:是否有任何C ++工具可以检测到static_cast,dynamic_cast和reinterpret_cast的滥用?

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

下面的问题的答案描述了在C++中推荐使用EDOCX1,0,EDOCX1,1,EDCOX1,2的方法:

什么时候应该使用静态u cast、动态u cast、const u cast和reinterpret u cast?

你知道有什么工具可以用来检测这些类型的铸件的误用吗?像pc lint或coverity静态分析这样的静态分析工具能做到这一点吗?

引起这个问题的特殊情况是不适当地使用static_cast来向下投射一个指针,编译器对此不发出警告。我想用一个工具来检测这个案例,而不是假设开发人员永远不会犯这个错误。


考虑到没有可靠的方法来判断指针在编译时指向什么类型,这是一个在编译时很难理解的问题。

最简单的方法是在运行时执行捕获,使用宏"safe-cast",该宏通过调试中的assert编译为动态类型转换,并使用静态类型转换版本。

现在,在调试期间,如果强制转换不合适,动态强制转换将返回空值并断言。释放期间也没有开销。


Visual Studio对其中一些内容发出警告。例如,C4946。不过,它们大多在默认情况下关闭。

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


Boost提供了多态u指针u downcast()和多态u downcast()函数,这些函数的作用类似于静态u cast,但如果等效的动态u cast失败,则会断言(通常仅在调试构建中)。

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