dynamic_cast与static_cast的区别?
3.1staticuucast
用法:staticucast<typeid>(exdivsion)
此运算符将exdivsion转换为typeid,但没有运行时类型检查来确保转换的安全性。主要有以下几种用法:
1。用于类层次结构中基类与子类之间指针或引用的转换。
执行上行链路转换是安全的(将子类的指针或引用转换为基类表示)。
执行下行链路转换(将基类的指针或引用转换为子类表示)时是不安全的,因为没有动态类型检查。
②用于基本数据类型之间的转换,如将int转换为char和int转换为enum。这种转型的安全性应该由开发商来保证。
③将空指针转换为目标类型的空指针。
④将任何类型的表达式转换为void。
注意:静态uuucast不能转换常量、voltae或uuuuuu未对齐属性。
3.2dynamicuucast
用法:dynamicucast<typeid>(exdivsion)
此运算符将exdivsion转换为id类型的对象。typeid必须是指向类的指针、对类的引用或void*;
如果typeid是类指针类型,则exdivsion也必须是指针。如果typeid是引用,那么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异常
原文标题:dynamic_cast详解 dynamic_cast与static_cast的区别?,如若转载,请注明出处:https://www.saibowen.com/tougao/19222.html
免责声明:此资讯系转载自合作媒体或互联网其它网站,「赛伯温」登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,文章内容仅供参考。