静态投射与动态投射

ray*_*mag 22 c++

可能重复:
常规强制转换与static_cast对比dynamic_cast

我不太习惯何时使用静态演员和动态.有什么解释吗?

Nic*_*yer 35

使用dynamic_cast从基类转换为派生类类型时.它检查正在转换的对象实际上是派生类类型,如果对象不是所需类型,则返回空指针(除非您正在转换为引用类型 - 然后它会抛出bad_cast异常).

static_cast如果不需要额外检查,请使用.正如Arkaitz所说,自从dynamic_cast执行额外检查以来,它需要RTTI信息,因此具有更大的运行时开销,而static_cast在编译时执行.

  • 动态强制转换也可用于转换引用,在这种情况下,它们会在转换错误时抛出异常,而不是返回空值 (3认同)
  • 这错过了说dynamic_cast只适用于多态类.将它与非多态类一起使用是一个错误. (2认同)

xan*_*xan 9

在某些情况下,与此类似,"静态"是指编译时,"动态"是指运行时.

对于编译时检查,请使用static_cast(限于编译器知道的内容).对于运行时检查,请使用dynamic_cast(仅限于带有RTTI的类).如果不进行检查,请使用reinterpret_cast.