在C ++中打印基类指针引用的对象类型?

时间:2014-06-27 17:10:24

标签: c++ rtti

如果我有A类,而B类是A的子类,那么typeid(x)应该给出A的类型或B的类型,如果x由下式给出:

A *x = new B();

在我的测试中,我得到了A的类型 - 这不是很有用 - 但我不确定这是由于C ++是如何工作的,还是由于编译器设置?

1 个答案:

答案 0 :(得分:2)

示例代码:

#include <iostream>
#include <typeinfo>

// Remember to add a virtual member function in A
// to enable RTTI.
struct A { virtual ~A() {} };

struct B : A { virtual ~B() {}};

int main()
{
   A* ap = new B();
   std::cout << typeid(ap).name() << std::endl;
   std::cout << typeid(*ap).name() << std::endl;
}

输出,使用g ++ 4.8.2:

P1A
1B