我已经读过static_cast在编译时发生,而dynamic_cast在运行时发生,因此比static_cast慢。 dynamic_cast可以返回null ptr(与指针一起使用时),或者抛出不良的强制转换异常。我的问题是reinterpret_castconst_cast在编译时或运行时会发生什么?我认为解释转换在运行时发生,因为它的行为类似于dynamic_cast,指示转换是否成功。我对么 ?那const_cast是那个编译时间呢?

最佳答案

动态类型转换是唯一需要在运行时“计算”的类型。所有其他转换都在编译时计算。

  • static_cast的机器代码是固定的函数,具体取决于您要转换FROM和TO的类型。
  • 实际上,const_cast的机器代码只不过是允许将const值传递为no-const,反之亦然。因此可以在编译时解决
  • 对于reinterpret_cast,机器代码也可以在编译时解析。一旦它只是“用正在寻找B型的人的眼睛看一下指向A型的指针”。
  • dynamic_cast需要解析虚拟表,并根据FROM和TO类型调整虚拟方法的正确地址。这就是为什么它更复杂!
  • 07-24 09:46
    查看更多