type_info对象存储在哪里?

Mu *_*iao 3 c++

我从" Inside the C++ Object Model "中读到,type_info对象通常存储在虚拟表的第一个插槽中.但是,我迭代了虚拟表中的成员:

class Base {
public:
    virtual void f() { cout << "Base::f" << endl; }
    virtual void g() { cout << "Base::g" << endl; }
    virtual void h() { cout << "Base::h" << endl; }
};

typedef void(*Fun)(void);

Base b;

(Fun)*((int*)*(int*)(&b)+0); // Base::f()
(Fun)*((int*)*(int*)(&b)+1); // Base::g()
(Fun)*((int*)*(int*)(&b)+2); // Base::h()
Run Code Online (Sandbox Code Playgroud)

从最后三行看,我根本找不到type_info.

Nic*_*las 6

没有交叉编译器方法来获取type_info对象的地址.你也不期望会有; 获得a的方法type_info是使用特定的C++关键字:typeid.

  • 是的,`type_info`是"存储在某个地方".这是编译器必须为其创建存储的真实对象.但很可能,它存储在全局数据中,因为`type_info`对象必须存在,直到执行结束. (3认同)