以下问题的答案描述了 C++ 中 static_cast
、dynamic_cast
和 reinterpret_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/