dynamic_cast和static_cast dynamic-cast可以作为对象继承之间的转换?
dynamic-cast可以作为对象继承之间的转换?
动态uucast用于对象的指针和引用。当它用于多态类型转换时,
允许隐式转换和反向转换操作。它类似于静态转换,不同之处在于在相反的转换过程中,动态转换将检查操作的有效性。如果返回的对象不是请求的有效完整对象,则返回null,否则返回有效对象。如果返回的对象是引用,将抛出一个错误的类型转换异常
3.1 static ucast
用法: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更安全。
dynamic_cast与static_cast的区别?
很多C源代码,如果编译器不能编译通过,提示不能使用指针强制转换,那么你需要一个小的重新解释uucast<type>,例如,一个简单的rswier/c4c4编译器源代码,这是一个C风格的源代码,你可以用这个东西。这个源代码稍加修改,可以用G,vs(cpp文件)编译,类型转换错误可以很快解决。在arm和X86平台上使用G编译器可以编译。当您转到MFC时,您可以看到reinterpret When you create the source code(vs2017)ucast<hmode> to convert a type to a handle。然后mov deax、eax等等,然后重新解释uucast<char*>,同样的道理。类似地,constucast、staticuucast、dynamicuucast和其他cast都有自己的场景。当你需要了解这些东西的时候,你不会使用它们。
dynamic_cast和static_cast dynamic_cast原理 dynamic_cast用法详解
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。