typeid用于多态类型

时间:2010-11-17 09:01:13

标签: c++ typeid

我希望这段代码可以打印'Same 1''Same2',但它只打印'Same1':

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

struct C{virtual ~C(){}};
struct D : C{};
int main(){
   D d;
   C c, &cr1 = d;
   if(typeid(cr1) == typeid(D)) cout << "Same1";
   if(typeid(&cr1) == typeid(D*)) cout << "Same2";
}

§5.2.8/ 2和§5.3.1/ 3似乎都向我建议应该打印'Same2'。

捕获的内容和位置在哪里?

1 个答案:

答案 0 :(得分:17)

指针不是多态类型。他们没有虚拟成员。事实上,他们没有任何成员。它们也不能从其他类型派生,也不能用作基类。因此,T*的静态和动态类型始终为T*

在“Same2”行中,您要比较指针的typeid,而不是指向对象的typeid。因此,编译器只查看静态类型C*D*。它们显然不一样,必须有不同的type_info个对象。