首页 理论教育 C++STLdynamic_cast操作符使用

C++STLdynamic_cast操作符使用

时间:2023-10-25 理论教育 版权反馈
【摘要】:使用dynamic_cast操作符将基类对象的引用或指针转换为同一继承层次中其他类型的引用或指针。与dynamic_cast一起使用的指针必须是有效的。与其他强制类型转换不同,dynamic_cast涉及运行过程中的类型检查。若转换到引用类型的dynamic_cast失败,则抛出一个bad_cast类型的异常。dynamic_cast操作符一次执行两个操作,即先验证被请求的转换是否有效,只有转换有效,操作符才实际进行转换。仅当val实际引用一个Type类型对象或者val是一个Type派生类的对象时,dynamic_cast操作才将操作数val转换为希望的Type&类型。

C++STLdynamic_cast操作符使用

使用dynamic_cast操作符将基类对象的引用或指针转换为同一继承层次中其他类型的引用或指针。与dynamic_cast一起使用的指针必须是有效的(它必须是0或指向一个对象)。

与其他强制类型转换不同,dynamic_cast涉及运行过程中的类型检查。若绑定到引用或指针的对象不是目标类型的对象,则dynamic_cast失败;若转换到指针类型的dynamic_cast失败,则dynamic_cast的结果是0值。若转换到引用类型的dynamic_cast失败,则抛出一个bad_cast类型的异常。

dynamic_cast操作符一次执行两个操作,即先验证被请求的转换是否有效,只有转换有效,操作符才实际进行转换。一般而言,引用或指针所绑定对象的类型在编译时是未知的,基类指针可以赋值为指向派生类对象。同样基类的引用可以用派生类对象初始化,因此dy- namic_cast操作符执行的验证必须在运行时进行。(www.xing528.com)

使用dynamic_cast将基类指针转换为派生类指针,可以使用dynamic_cast将基类引用转换为派生类引用,这种dynamic_cast操作形式如下:

Type是转换的目标类型,而val是基类类型的对象。仅当val实际引用一个Type类型对象或者val是一个Type派生类的对象时,dynamic_cast操作才将操作数val转换为希望的Type&类型。如果不存在空引用,不可能对引用使用指针强制类型转换的检查策略;相反,当转换失败时,会抛出一个std::bad_cast异常。该异常是在STL库的头文件<typeinfo>中定义的。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈