C ++静态和动态类型转换

c++ static and dynamic type casting

本问题已经有最佳答案,请猛点这里访问。

为什么static_cast<>()(也称为向下转换)不强制转换类型,而dynamic_cast<>()(也称为向上转换)强制转换类型? 两者都用于推进类层次结构。 它们之间可能有什么不同,以至于dynamic_cast<>()强制转换类型为运行时?


两者通常都用于向下转换(从基类到派生类); 向上转换始终是安全的,因此不需要显式强制转换。 如注释中所述,如果将它们用于上载,则两者都是等效的(并且等效于隐式转换)。

对于向下转换,static_cast速度更快,但有潜在危险,因为它不执行运行时检查,并且在转换无效时会给出未定义的行为。 它也适用于非多态类型,而dynamic_cast需要运行时类型信息,而该信息仅可用于多态类型。

您的入门书应对此进行详细介绍。