2016 - 2024

感恩一路有你

static_cast dynamic_cast区别 dynamic_cast与static_cast的区别?

浏览量:2017 时间:2021-03-11 08:08:32 作者:admin

dynamic_cast与static_cast的区别?

3.1 static uucast

用法:static ucast< type ID>(exdivsion)

此运算符将exdivsion转换为type ID,但没有运行时类型检查来确保转换的安全性。主要有以下几种用法:

1。用于类层次结构中基类与子类之间指针或引用的转换。

执行上行链路转换是安全的(将子类的指针或引用转换为基类表示)。

执行下行链路转换(将基类的指针或引用转换为子类表示)时是不安全的,因为没有动态类型检查。

②用于基本数据类型之间的转换,如将int转换为char和int转换为enum。这种转型的安全性应该由开发商来保证。

③将空指针转换为目标类型的空指针。

④将任何类型的表达式转换为void。

注意:静态uuucast不能转换常量、voltae或uuuuuu未对齐属性。

3.2 dynamic uucast

用法:dynamic ucast< type ID>(exdivsion)

此运算符将exdivsion转换为ID类型的对象。type ID必须是指向类的指针、对类的引用或void*;

如果type ID是类指针类型,则exdivsion也必须是指针。如果type ID是引用,那么exdivsion也必须是引用。

动态转换主要用于类级别之间的上转换和下转换,也可以用于类之间的交叉转换。

当类级别上转换时,动态uucast和静态uuu的效果相同;

在下行转换时,动态uucast具有类型检查功能,比静态uucast更安全。

c 中,dynamic_cast是什么作用?

指向基类的指针可以指向继承类的对象,但相反,指向继承类的指针不能指向基类的对象。在这个例子中,Pb=newc做了两件事:1,创建一个C的对象;2,隐式地将其转换为类B的指针类型。此时,虽然它的本质是一个C对象,但它仍然是表面上类型B的指针。所以我们使用c*PC=dynamic,当cast<C*>(PB)执行显示转换时,编译器认为用户试图将继承类的指针指向基类的对象,这可能导致构造函数无法初始化继承类的自身成员。如果编译错误,RTTI可以安全地将基类的指针转换为继承类的指针或动态

Cast用于对象的指针和引用。当它用于多态类型转换时,

允许隐式转换和反向转换操作。它类似于静态转换,不同之处在于在相反的转换过程中,动态转换将检查操作的有效性。如果返回的对象不是请求的有效完整对象,则返回null,否则返回有效对象。如果返回的对象是引用,则会抛出一个坏的uucast异常

static_cast dynamic_cast区别 realloc函数的用法 dynamic_cast和static_cast

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。