为什么static_cast<>()
(也称为向下转换)在dynamic_cast<>()
(也称为向上转换)时不会转换类型运行时?两者都用于推进类层次结构。它们之间可能有什么不同,dynamic_cast<>()
必须转换类型运行时?
答案 0 :(得分:3)
两者通常用于向下转换(从基类到派生类);向上转换总是安全的,因此不需要显式转换。如评论中所述,如果您将它们用于向上转换,则两者都是等效的(并且相当于隐式转换)。
对于向下转换,static_cast
更快但有潜在危险,因为它不执行运行时检查,并在转换无效时给出未定义的行为。它也适用于非多态类型,而dynamic_cast
需要运行时类型信息,这些信息只能从多态类型中获得。
您的介绍性书籍应详细介绍。