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

时间:2014-01-21 17:21:13

标签: c++ dynamic-cast static-cast

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

1 个答案:

答案 0 :(得分:3)

两者通常用于向下转换(从基类到派生类);向上转换总是安全的,因此不需要显式转换。如评论中所述,如果您将它们用于向上转换,则两者都是等效的(并且相当于隐式转换)。

对于向下转换,static_cast更快但有潜在危险,因为它不执行运行时检查,并在转换无效时给出未定义的行为。它也适用于非多态类型,而dynamic_cast需要运行时类型信息,这些信息只能从多态类型中获得。

您的介绍性书籍应详细介绍。