如果我有A类,而B类是A的子类,那么typeid(x)
应该给出A的类型或B的类型,如果x由下式给出:
A *x = new B();
在我的测试中,我得到了A的类型 - 这不是很有用 - 但我不确定这是由于C ++是如何工作的,还是由于编译器设置?
答案 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