3

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

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

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

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

4

3 回答 3

5

鉴于在编译时没有可靠的方法来判断指针指向的类型,这是一个在编译时很难捕捉到的问题。

最简单的方法是在运行时进行捕获,使用宏“safe_cast”编译为动态转换,在调试中使用断言,在发布时使用静态转换。

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

于 2010-03-18T00:46:12.320 回答
4

Visual Studio 对其中一些有警告。例如,C4946。不过,它们大多默认关闭。

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

于 2010-03-18T06:50:37.473 回答
0

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

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

于 2016-08-10T20:07:43.387 回答