dynamic_cast
s 较慢,但它们比static_cast
s 更安全(当然,当与对象层次结构一起使用时)。我的问题是,在我在调试代码中确保所有(动态)强制转换都是正确的之后,我有什么理由不将它们更改为static_cast
s 吗?
我计划使用以下构造来做到这一点。(顺便说一句,你能想出一个更好的名字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
编辑: Boost 已经为此提供了一些东西:polymorphic_downcast
. 感谢 PlasmaHH 指出这一点。