关于网友提出的“ RTTI 存在哪?”问题疑问,本网通过在网上对“ RTTI 存在哪?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: RTTI 存在哪?
描述:
class A{};
就这么一个空类,typeid 这个函数是如何获得 type_info的?
解决方案1: RTTI Complete Object Locator,不一定是第一项;
看编译器如何安排类和虚函数表的布局。
解决方案2:
应该是这样的。
不过VC6 不能完全支持typeid ,
当类带有虚函数的时候 ,比如
class Base{
int x;
public:
virtual ~Base(){cout<<"~Base()"<<><>
};
class Drived:public Base{
int y;
public:
virtual ~Drived(){cout<<"~Drived()"<<><>
};
Base* p = new Drived;的时候,
cout<<"type of p="<< typeid(*p).name()<<>
不能正确解析*p的类型----出现运行时错误。
而MFC 自己另外定义了一套 RTTI。
解决方案3: 不过是在代码中有 typeid ,这种使用 type_info的代码的时候。
编译器把符号表里的type_info相关的信息。
写一部分在目标代码中,然后 typeid从该部分代码中(可能是一个表格),读取type_info而已。
大概,只是,建立一个类型名,和类型信息的映射,而已。
不一定需要对象的信息。
当虚拟继承的时候,对象中可能会存储类型相关的信息,称为元数据。
解决方案4: 编译器生成代码……
以上介绍了“ RTTI 存在哪?”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3679748.html