c++中dynamic_cast的缺点是什么?

What are the disadvantages of dynamic_cast in C++?

本文关键字:缺点 是什么 cast dynamic c++      更新时间:2023-10-16

尽管事实上dynamic_cast返回0,如果正在处理的指针是不兼容的类型,为什么要避免使用dynamic_cast呢?

运行时间非零。差不多就是这样。c -强制转换和它们的c++对应部分,如:reinterpretstatic是零开销的,因为它们是在编译期间执行的。

对于某些人来说,重要的部分可能是他们确实需要RTTI,这也引入了一些开销,例如代码大小,因为编译器必须将类型信息包含到二进制中,这通常是不做的。请注意,这可能是编译器中的非标准选项。

另一个来自wiki的相关注释:"在最初的c++设计中,Bjarne Stroustrup没有包含运行时类型信息,因为他认为这种机制经常被滥用。"

编辑:在引用和评论之后。我不确定这是否真的是一个缺点,我想指出的是,当你使用它时,你应该考虑一下你是否真的需要它。

有些人不喜欢它,有些人滥用它。

运行时开销:

  • 需要更多的内存来存储RTTI。
  • 类型必须在运行时检查。
设计问题:

  • 涉及的类型必须是多态的
  • 通常是代码中其他错误的标志;你为什么要检查?