static cast和dynamic cast,static cast和 ()的区别

  static cast和dynamic cast,static cast和 ()的区别

  1.static_cast在编译时强制转换,dynamic_cast在运行时转换(更安全)

  2.static_cast是C语言的强制转换替代;Dynamic_cast会在运行时检查转换是否是类型安全的,只有当类型是多态的,即类至少有一个虚方法时才合法。

  其中static_cast是相当于C的强制类型转换,用起来可能有点危险。在转换之前,dynamic_cast将检查指针(或引用)所指向的对象的实际类型是否与转换的目标类型兼容。如果转换兼容,则可以获得派生类的指针(或引用)。否则,如果执行指针类型的转换引用,将获得空指针。如果执行引用类型的转换,将引发异常。

  3.dynamic_cast可以转换指针和引用(基类到派生类),但不能用于转换对象。而static_cast可以转换对象。

  4.在类级别之间转换时,dynamic_cast和static_cast的效果是相同的;

  在下行转换中,dynamic_cast有类型检查的功能,比static_cast更安全。

  “类之间的安全向下转换”,由C的dynamic_cast运算符实现。当对指针使用dynamic_cast时,首先尝试转换它。如果成功(即指针的动态类型(见第38条)与被转换的类型一致),将返回新类型的合法指针;如果dynamic_cast失败,则返回一个空指针。

  5.

  Dynamic_cast是一个试探性的映射,比如dynamic_cast A *pB的意思是“希望是A*,打算要求是”。它通常被称为类层次结构的动态导航。

  而static_cast通常可以用于类级静态导航、无映射转换、缩小转换(信息丢失)等。static_cast应用广泛,但如前所述,我们应该在类级导航转换中使用前者,因为后者static_cast可能意味着承担风险(比如转换过程中的信息丢失类似于强制转换)。但是如果一个类层次结构中没有虚函数或者我们确信有其他信息允许我们安全地向下映射,那么后面的static_cast更快。

static cast和dynamic cast,static cast和 ()的区别