c++ - 是否有任何 C++ 工具可以检测 static_cast、dynamic_cast 和 reinterpret_cast 的滥用?

标签 c++ casting static-analysis downcast dynamic-analysis

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

When should static_cast, dynamic_cast, const_cast and reinterpret_cast be used?

你知道有什么工具可以用来检测这些类型的转换滥用吗?像 PC-Lint 或 Coverity Static Analysis 这样的静态分析工具可以做到这一点吗?

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

最佳答案

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

最简单的方法是在运行时执行捕获,使用宏“safe_cast”,它在调试时编译为带有断言的 dynamic_cast,在发布时为 static_cast。

现在调试的时候,如果cast不合适,动态cast会返回NULL,然后assert。发布期间也没有开销。

关于c++ - 是否有任何 C++ 工具可以检测 static_cast、dynamic_cast 和 reinterpret_cast 的滥用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2465964/

相关文章:

Erlang 透析器 创造的乐趣没有本地返回

c++ - 通过 int&& 以 int& 参数初始化函数

c++ - 如何拖放由多个widget组成的qwidget?

c++ - 为什么运算符的操作数需要是同一类型?

javascript - 简写(类型不同)真/假比较是字符串的好习惯吗?

ios - 来自静态分析器的 API 滥用错误

python - 使用 mypy,我如何键入注释一个装饰器来装饰接受某个东西的子类的函数?

c++ - switch 语句中的函数调用。

c++ - 删除指针的后遗症

casting - 将 interface{} 转换为某种类型