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静态分析这样的静态分析工具能做到这一点吗?
引起这个问题的特殊情况是不适当地使用
考虑到没有可靠的方法来判断指针在编译时指向什么类型,这是一个在编译时很难理解的问题。
最简单的方法是在运行时执行捕获,使用宏"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。