C++ RTTI 机制

本文介绍了C++中的RTTI机制,重点讨论了dynamic_cast的实现原理、应用场景,以及typeid的功能和使用注意事项。dynamic_cast用于多态类型的安全转换,依赖于类的虚函数表中的type_info信息。typeid则提供对象的类信息,适用于非强制转换的值,运行时开销较小。
摘要由CSDN通过智能技术生成

RTTI(Run Time Type information): 是编译器在 编译期间 生成的特殊类型信息(type_info),包括对象继承关系,对象本身的描述,RTTI 是为多态而生成的信息,所以 只有具有虚函数的对象才会生成 RTTI。

在 C++ 中,有以下两个函数用于 运行时类型检测


一、dynamic_cast


语法:

dynamic_cast < new_type > ( expression )

返回类型为 new_type 的值 或 抛出一个异常。

  • new_type

    new_type 必须是指向完整类类型或 void * 的指针或引用。必须是类的指针或引用,或 void*。因为没有对 void 的引用。

  • expression

    expression 必须是指向完整类类型的指针或引用。而且,expression 所代表的类必须包含虚函数。

如果转换成功,dynamic_cast 将返回一个 new_type 的值。 如果转换失败,而且 new_type 是指针,那么将返回NULL; 而如果 new_type 是引用,那么将抛出异常 std::bad_cast。

1.1 实现原理

C++ 对象模型 中 , 我们知道,在包含虚函数的类中,会产生一张虚函数表,而虚函数表的前面,还会有一部分额外的信息,用于记录与类相关的信息 —— type_info,比如说,对象继承关系,对象本身的描述等等。


这里写图片描述

dynamic_c

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值