TypeId不按预期打印信息

时间:2012-07-09 13:01:21

标签: c++ typeid

  

可能重复:
  Printing derived class name in base class

我正在使用GCC,以下代码输出了一些意外的内容

#include <iostream>
#include <typeinfo>
using namespace std;

class B {
  public:
  B ( B * ptr) { cout<< typeid(*ptr).name()<<endl;}
};

class  D : public B {
  public:
  D() : B(this) { cout<<typeid(this).name()<<endl;}
};

int main()
{
    D d;
    return 0;
}

输出:

1B
P1D

任何人都可以向我解释为什么基类不能正确地告诉派生类的类型? 非常感谢

2 个答案:

答案 0 :(得分:3)

有两个原因:

  1. 对象(*ptr)尚未完全构建。
  2. 您的类不是多态的(没有虚拟成员函数),因此不存在动态类型信息。

答案 1 :(得分:0)

那件事真的取决于编译器。 msvc为此提供了不同的typeid字符串。