在生产代码中是否可以安全地删除dynamic_casts?

Pau*_*nta 9 c++ performance dynamic-cast casting

dynamic_casts比较慢,但它们比static_casts 更安全(当然,当与对象层次结构一起使用时).我的问题是,在我的调试代码中确保所有(动态)强制转换都是正确的之后,我有什么理由不将它们更改为static_casts吗?

我计划使用以下构造执行此操作.(顺便说一下,你能想到一个更好的名字assert_cast吗?也许debug_cast?)

#if defined(NDEBUG)

    template<typename T, typename U>
    T assert_cast(U other) {
        return static_cast<T>(other);
    }

#else

    template<typename T, typename U>
    T assert_cast(U other) {
        return dynamic_cast<T>(other);
    }

#endif
Run Code Online (Sandbox Code Playgroud)

编辑: Boost已经有了一些东西:polymorphic_downcast.感谢PlasmaHH指出这一点.

iam*_*ind 1

在我在调试代码中确保所有(动态)强制转换都是正确的之后,我有什么理由不将它们更改为 static_casts 吗?

恕我直言,如果您 100% 确定所有内容 dynamic_cast<>都是正确的,那么没有理由不将它们更改为static_cast<>. 你可以改变它们。