C++中的dynamic_cast开销

Avi*_* A. 11 c++ casting

我知道dynamic_cast有运行时检查,因此考虑更安全(可以在失败时返回空指针)但比static_cast慢.但两者之间的开销有多糟糕?

我是否应该考虑在循环中使用static_cast来解决常规大型项目中的性能问题?或者差异很小,只与特殊的实时程序有关.

Lig*_*ica 11

你有资料吗?

规则是:

  • 使用static_cast时,你知道目标类型是有效的.
  • dynamic_cast在您不确定时使用,并且您需要程序为您查找对象的运行时类型.

就这么简单.所有其他考虑都是次要的.


Mic*_*gan 5

取决于动态演员如何进行其班级安全/正确性检查.在我所描述的系统中,它可以很快变成非常大量的字符串比较.这是一个足够大的交易,我们几乎使用一个assert_cast样式系统,其中静态强制转换为性能而动态用于调试.