ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第七章:运行期类型识别RTTI

2021-07-03 19:02:14  阅读:157  来源: 互联网

标签:info 识别 类型信息 运算符 引用 第七章 类型 RTTI type


 

  1.RTTI①需要额外的空间以存储类型信息,通常是一个指针,指向某个类型信息节点。②需要额外的时间以决定执行期的类型。

  2.编译器为了支持RTTI策略,给需要多态的类声明一个或多个虚函数,把与该类相关的类型信息(类型描述器type_info)对象都放进虚函数表中(通常放入第一个slot,他是被编译器静态设定的,而非执行期由构造函数设定的),降低了额外负担(只需要一个指向虚函数表的指针)。

//获取pt的类型描述器
((type_info*)(pt->vptr[0]))->_type_descriptor;

  3.dynamic_cast通过把转换的目标类型的类型描述器和被转换的类型描述器交给一个运行时的库函数比较,比较结果吻合则实行转换,不吻合则返回0(用指针时)或者抛出异常(用引用时,因为引用设为0,会引起一个临时对象(拥有被引用的目标类型)被产生出来,该临时对象的初值被设为0,然后目标类型的引用被设定为该临时对象的一个别名,这是不合法的,所以需要抛出异常),转换成功则返回其地址或引用。

  4.Typeid运算符传回一个类型为type_info的常量引用。type_info包含了相等运算符==、不等运算符!=,类型信息编码前的名字(name())和编码后的名字(raw_name())和对类型描述器排序的算法(如before)以及支持异常处理的函数(如在异常发生时提供关于指针、函数和类的更详细信息)。

  5.内置类型也可以使用typeid,只不过这时候是静态绑定。

  

标签:info,识别,类型信息,运算符,引用,第七章,类型,RTTI,type
来源: https://www.cnblogs.com/wildricky/p/14967020.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有