到以下问题的答案描述static_castdynamic_cast的C ++中的推荐用法,并reinterpret_cast

何时应的static_cast,dynamic_cast的,的const_cast和的reinterpret_cast使用?

你知道的,可用于检测这类演员的误用任何工具?请问一个静态分析工具,如PC - 皮棉或Coverity的静态分析这样做呢?

这提示这个问题的特定的情况下是不恰当的使用static_cast的向下转换到一个指针,其中所述编译器不发出警告。我想使用工具来检测这种情况下,并不能认为开发商绝不会犯这样的错误。

有帮助吗?

解决方案

由于没有告诉在编译时什么类型的指针指向没有可靠的方法,这是一个相当困难的问题,赶在编译时。

最简单的方法是做捕捉在运行时,使用宏“safe_cast”,其编译成一个dynamic_cast的与在调试断言,并且在释放的static_cast。

现在,在调试期间,如果转换是不恰当的,动态铸造将返回NULL,并断言。还有释放期间没有开销。

其他提示

视觉工作室具有用于其中的一些警告。 C4946,例如。他们大多是默认是关闭的,但。

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

升压提供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归因
不隶属于 StackOverflow
scroll top