一看到typeid你先顾名思义下,觉得这会是个啥东东.首先type自然是说类型,比如int , long ,自定义类型等.而id嘛就是身份的唯一标志嘛,像你的身份证号一样.
C++刚开始的时候没有typeid这玩艺的,所以最初的MFC里面整出个叫RunTimeClass的宏来做这事,判断不同的变量的类型是否相同.到后面编译器支持该功能了,能简单的用运算符typeid来判断类型是否相同了.该功能又叫RTTI (run time type identification) 有时貌似又叫run time type information.我也不确定具体哪个合适
typeid和用法
假如有类class Arwen { } ;
class Weiwen :public Arwen{ } ;
1.typeid(XXX).name()返回类型的文字信息
Arwen* pArwen = new Arwen;
Arwen arwen;
cout<<typeid( pArwen ).name()<<endl;//打印出class Arwen*
cout<<typeid( *pArwen ).name(); //打印出class Arwen
cout<<typeid( arwen ) ; //打印出class Arwen
cout<< typeid (Arwen) ; //打印出class Arwen
2.继承类中的类型信息
比如上面的例子中.
Arwen* pArwen = new Arwen;
Arwen* pWeiwen = new Weiwen;
cout<< typeid( *pArwen).name(); //class Arwen
cout<<typeid( *pWeiwen).name(); //class Arwen
if( typeid( *pArwen) == typeid(*pWeiwen) )
cout<<" it is same type"<<endl; //输出该结果
else
cout<<"different type"<<endl;
上面的结果可能不是我们想要的.不过由于这里没有涉及到多态.所以typeid起的作用也不大.把之前的两个类改写下
3.多态中的类型信息
class Arwen {
virtual void Fun() { }
};
class Weiwen :public Arwen{ } ;
此时唯一的不同是类中有个虚函数了.
Arwen* pArwen = new Arwen;
Arwen* pWeiwen = new Weiwen;
cout<< typeid( *pArwen).name(); //class Arwen
cout<<typeid( *pWeiwen).name(); //class Weiwen
if( typeid( *pArwen) == typeid(*pWeiwen) )
cout<<" it is same type"<<endl;
else
cout<<"different type"<<endl; //输出该结果