c++ static and dynamic type casting
为什么static_cast<>()(也称为向下转换)不强制转换类型,而dynamic_cast<>()(也称为向上转换)强制转换类型? 两者都用于推进类层次结构。 它们之间可能有什么不同,以至于dynamic_cast<>()强制转换类型为运行时?
-
您对此有错误的看法:它们的行为方式是这样的,因为这正是他们的设计意图。
-
我认为您已切换了两个__cast术语,但static_cast的用途不只是上播。 是的,可以切换它们,但是我从未见过dynamic_cast做向上转换。 通常在CRTP之类的内容中发现用于向下转换的static_cast。
-
您没有显示任何研究成果。
两者通常都用于向下转换(从基类到派生类); 向上转换始终是安全的,因此不需要显式强制转换。 如注释中所述,如果将它们用于上载,则两者都是等效的(并且等效于隐式转换)。
对于向下转换,static_cast速度更快,但有潜在危险,因为它不执行运行时检查,并且在转换无效时会给出未定义的行为。 它也适用于非多态类型,而dynamic_cast需要运行时类型信息,而该信息仅可用于多态类型。
您的入门书应对此进行详细介绍。
-
有向上转换的隐式转换,但有时您可能需要显式转换。 在这种情况下,dynamic_cast和static_cast是同义词。