typeid详解

typeid 运算符通常被用来判断两个类型是否相等。

typeid 运算符用来获取一个表达式的类型信息。类型信息对于编程语言非常重要,它描述了数据的各种属性:

  • 对于基本类型(int、float 等C++内置类型)的数据,类型信息所包含的内容比较简单,主要是指数据的类型。
  • 对于类类型的数据(也就是对象),类型信息是指对象所属的类、所包含的成员、所在的继承关系等。

(1)内置类型的比较

#include<iostream>
#include<typeinfo>
 using namespace std;
 int main()
 {
	int a = 2; int b = 10;
	float f;
	char *str;
	cout<<(typeid(int)==typeid(a))<<endl;//1
	/*一个类型不管使用了多少次,编译器都只为它
	创建一个对象,所有 typeid 都返回这个对象的引用。*/
	cout<<(typeid(a)==typeid(b))<<endl;//1
	cout<<(typeid(a)==typeid(f))<<endl;//0
	cout<<(typeid(int)==typeid(char))<<endl;//0
	cout<<(typeid(str)==typeid(char))<<endl;//0
	cout<<(typeid(str)==typeid(char*))<<endl;//1
    return 0;
 }

(2)类的比较

#include<iostream>
#include<typeinfo>
using namespace std;
class Base{
 };
class Derived:public Base{
 };
 int main()
 {
	Base obj1;
	Base *p1;
	Derived obj2;
	Derived *p2=new Derived;
	p1=p2;
	cout<<(typeid(obj1)==typeid(*p1))<<endl;//1
	cout<<(typeid(&obj1)==typeid(p1))<<endl;//1
	cout<<(typeid(obj1)==typeid(obj2))<<endl;//0
	cout<<(typeid(*p1)==typeid(Base))<<endl;//1
	/*即使将派生类指针 p2 赋值给基类指针 p1,
	p1 的类型仍然为 Base**/
	cout<<(typeid(p1)==typeid(Base*))<<endl;//1
	cout<<(typeid(Derived*)==typeid(p1))<<endl;//0
    return 0;
 }
#include<iostream>
#include<typeinfo>
using namespace std;
class B{
	public:
		virtual void vm(){
		} 
		int b=10;
 };
class D:public B{
 };
 int main()
 {
	B *pb=new D;
	D *pd=(D*)pb;
	cout<<(typeid(pd)==typeid(D*))<<endl;//1
	cout<<(typeid(*pd)==typeid(D))<<endl;//1
	
	cout<<(typeid(pb)==typeid(B*))<<endl;//1
	cout<<(typeid(*pb)==typeid(D))<<endl;//1
	
	cout<<(typeid(pb)==typeid(D*))<<endl;//0
	cout<<(typeid(*pb)==typeid(B))<<endl;//0
	
	cout<<(typeid(pb)==typeid(pd))<<endl;//0
	cout<<(typeid(pb->b)==typeid(int))<<endl;//1
	
 }

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值