C++之RTTI机制


prtyaa
prtyaa 2024-01-06 22:53:07 64739 赞同 0 反对 0
分类: 资源 标签: 运维
RTTI简介 RTTI(Runtime Type Indentification) 即运行阶段类型识别。这是 C++新引进的特性之一。RTTI旨在为程序在运行阶段确定对象的类型提供一种标准方式。

这RTTI听起来是不是有点java中反射的味道?大差不差…

 

在C++中,只有类中包含了虚函数时才会启用RTTI机制,也就是当存在多态时才会存在RTTI机制,因为不存在多态的话在编译阶段既可以确定类型信息。

运行时类型识别(RTTI)功能主要由以下两个运算符实现:

  • typeid运算符,用于返回表达式的类型
  • dynamic_cast运算符,用于将基类的指针或引用安全地转换成派生类的指针

RTTI与dynamic_cast

我们知道C++中的多态是基于虚函数的方式实现的,而含有虚函数的类都会有一个对应的虚函数表,而这个虚函数表会存有相关类型的type_info的地址, 因而可以说dynamic_cast为RTTI的一个应用。

因为dynamic_cast使用RTTI,所以它在转换的过程中是可靠的,只有进行转换的指针确实是指向指定的类型时才会转换成功,否则就会转换失败,返回空指针。

例如以下的例子,第27行和第28行通过new不同的对象类型,会影响到第29行dynamic_cast的转换结果:

#include
class Base {
public:
Base(){

 


}
virtual ~Base() {


}
virtual void f(){
std::cout

 

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
prtyaaL0
粉丝 1 资源 1949 + 关注 私信
最近热门资源
银河麒麟桌面操作系统V10SP1-2403-update1版本中,通过“麒麟管家-设备管理-硬件信息-硬盘”查看硬盘类型时,显示的是HDD(机械硬盘),而实际上该笔记本的硬盘类型为SSD  81
以openkylin为例编译安装内核  77
分享解决宏碁电脑关机时自动重启的方法  73
统信uosboot区分未挂载导致更新备份失败  63
分享如何解决报错:归档 xxx.deb 对成员 control.tar.zst 使用了未知的压缩,放弃操作  63
统信uos安装mysql的实例参考  60
格之格打印机dp3300系列国产系统uos打印机驱动选择  57
在银河麒麟高级服务器操作系统V10SP3中,需要将默认shell类型修改为csh。  51
MySQL国产平替最佳选择---万里数据库(GreatDB)  45
最近下载排行榜
银河麒麟桌面操作系统V10SP1-2403-update1版本中,通过“麒麟管家-设备管理-硬件信息-硬盘”查看硬盘类型时,显示的是HDD(机械硬盘),而实际上该笔记本的硬盘类型为SSD 0
以openkylin为例编译安装内核 0
分享解决宏碁电脑关机时自动重启的方法 0
统信uosboot区分未挂载导致更新备份失败 0
分享如何解决报错:归档 xxx.deb 对成员 control.tar.zst 使用了未知的压缩,放弃操作 0
统信uos安装mysql的实例参考 0
格之格打印机dp3300系列国产系统uos打印机驱动选择 0
在银河麒麟高级服务器操作系统V10SP3中,需要将默认shell类型修改为csh。 0
MySQL国产平替最佳选择---万里数据库(GreatDB) 0
作者收入月榜
1

prtyaa 收益400.83元

2

zlj141319 收益237.91元

3

哆啦漫漫喵 收益231.52元

4

IT-feng 收益219.92元

5

1843880570 收益214.2元

6

风晓 收益208.24元

7

777 收益173.17元

8

Fhawking 收益106.6元

9

信创来了 收益106.03元

10

克里斯蒂亚诺诺 收益91.08元

请使用微信扫码

添加我为好友,拉您入交流群!

请使用微信扫一扫!