是否有任何C ++工具检测的static_cast,dynamic_cast的滥用,以及reinterpret_cast的?
-
20-09-2019 - |
题
到以下问题的答案描述static_cast
,dynamic_cast
的C ++中的推荐用法,并reinterpret_cast
:
何时应的static_cast,dynamic_cast的,的const_cast和的reinterpret_cast使用?
你知道的,可用于检测这类演员的误用任何工具?请问一个静态分析工具,如PC - 皮棉或Coverity的静态分析这样做呢?
这提示这个问题的特定的情况下是不恰当的使用static_cast
的向下转换到一个指针,其中所述编译器不发出警告。我想使用工具来检测这种情况下,并不能认为开发商绝不会犯这样的错误。
解决方案
由于没有告诉在编译时什么类型的指针指向没有可靠的方法,这是一个相当困难的问题,赶在编译时。
最简单的方法是做捕捉在运行时,使用宏“safe_cast”,其编译成一个dynamic_cast的与在调试断言,并且在释放的static_cast。
现在,在调试期间,如果转换是不恰当的,动态铸造将返回NULL,并断言。还有释放期间没有开销。
其他提示
视觉工作室具有用于其中的一些警告。 C4946,例如。他们大多是默认是关闭的,但。
升压提供polymorphic_pointer_downcast()和polymorphic_downcast()函数,其作用像的static_cast但将断言(通常仅在调试版本)如果等效dynamic_cast的失败。
请参阅 http://www.boost.org/doc /libs/1_61_0/libs/conversion/cast.htm 获得的信息。
不隶属于 StackOverflow