问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

typeid的实现机制是怎样的

发布网友 发布时间:2022-05-18 04:22

我来回答

2个回答

热心网友 时间:2023-10-09 05:16

typeid这是属于RTTI特性的一部分,意思是编译时编译器分析代码得到的变量类型信息保留到运行时,这样就可以在运行时动态知道数据的类型。不只是用虚函数的类,所有数据类型都可以。这种RTTI特性不止C++有,其他语言中也有所支持。请参考:
http://www.cnblogs.com/ustc11wj/archive/2012/08/11/2637319.html
但是typeid效率不高。如果想自己使用方便的话,建议:
在基类中添加一个int型成员变量(要public的),比如叫做type_id,然后在基类的构造函数中给这个type_id赋值为0;在派生类的构造函数中,将type_id赋值为1,2,…等等,每个派生类之间不要重复。这样只要访问type_id就可以知晓对象的类型了。这种方法的好处是不会增长虚函数表的长度,提高效率,但封装特性不佳(因为必须是public,外部可修改,但我们不要去改就好了)
另一种方式是添加一个函数,比如叫type_id,在基类中定义其返回0,而派生类中重载之,使其返回不同的数字。这样调用type_id函数就可以知道对象的类型。这种方法需要增加虚函数表的长度,但封装特性较好。追问你的办法通用性不好吧
标准是这样实现的
extern type_info example_info;
struct example
{
virtual type_info typeid()
{
return example_info
}
};

追答恩 看起来不错 不过”标准“是什么标准呢?可以给个出处吗?

热心网友 时间:2023-10-09 05:16

只有在基类中含有虚函数的时候typeid才会动态识别……追问类型信息放在哪里呢

追答虚函数是用对象中隐式含有指向虚函数表的指针来实现的,而类型信息和虚函数表放在一起,从而可以用指向虚函数表的指针加减一定的偏移量来访问……因此连虚函数表和指向这个表的指针都不存在,就不可能动态识别类型信息……

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
股票降息基点是什么意思? 加拿大央行降息25个基点 广西中医药大学口碑怎么样好就业吗 安徽单招258能上什么大专 2008高考分257,能上高职(二)吗. 270分可以上的大专有哪些 家里突然出现许多深褐色的小虫子,是什么呢? 形容中秋的月亮的诗句古诗 工会医药费怎么报销比例 电热水器不保温怎么解决 java序列化的实现机制是什么?Serialize接口文件中没有接口方法,是空接口,那么序列化具体是如何实现的? C语言变参函数Printf实现机制是什么? 游戏中跨服的实现机制 snmp的交互方式有哪三类?实现机制分别是怎样的 试论历史规律的实现机制 道德的激励功能的实现机制分为哪几类? 生态产品价值实现机制是什么? 求问各位大佬python3.6怎么使用opencv,用哪个版本 有没有冰箱门锁 历届奥运会主场馆的第19届奥运会主场馆 2022年第24界奥运会是北京,第十九届奥运会是哪一年? 俄罗斯举办过几次奥运会? 谁知道第19届奥运会在哪里举办?是多少年? 第十九届奥运会在哪召开? 第十九届奥运会是在哪个国家举行的 任字姓氏读音是什么? “任”读几声? “任丘”的“任”声调是第几声? 梁任公的任的读音,要理由 任有那几种读音? 影响气候的因素有哪些?(3个) 影响气候的三因素 影响气候的主要因素是什么? 影响气候的3个主要因素 影响气候的因素包括哪几方面 影响气候的因素主要包括哪几方面 分别有着怎样的影响呢? 万方数据库中论文导出 求万方数据库论文一篇 魏璎珞的文章来源于万方数据库论文大约有多少篇? 网络卡顿非常严重。 我装的是300M的宽带,我只要在家里用了电脑,其他设备都会变得异常卡顿,咋办啊? 500M宽带上网看视频卡顿厉害 被别人盗用了怎么办? 被盗用了该怎么办 我被别人用了怎么办? 我被别人用了? 我的被人盗用了怎么办? 被别人盗用了怎么办 被盗用了怎么办? 我的被别人用了怎么找回来? 1.如何截取视频中的片段? 2.有人说暴风影音就行,怎么操作呢?