c++ typeid操作符

本文介绍了C++中的typeid操作符,它用于实现运行时类型识别(RTTI)。讲解了typeid的基本用法,包括编译期获取类型和运行时通过RTTI获取类型,并通过实例分析了虚函数对类型判断的影响。最后总结了使用typeid时应注意虚函数对结果的影响。
摘要由CSDN通过智能技术生成

前言

在分析typeid之前, 先了解什么是RTTI(运行时类型识别). RTTI使程序能够获取由基指针(引用)所指向的对象的实际派生类型, 允许用指向基类的指针(引用)来操作对象并能够获取到这些指针(引用)所指对象的实际派生类型. c++具体支持typeiddynamic_cast两个操作符.

typeid操作符用于返回对象的引用, 实际调用的是type_info标准库类型, 也在typeinfo头文件中. 并且typeid有两种形式, 一种在编译期获得类型, 一种在运行时通过RTTI获取类型.

注意 : typeid的类中的默认构造函数和复制构造函数都是被删除的, 所以typeid对象不能执行复制操作, 只能单独创建对象.

typeid支持的操作

运算 描述
t1 == t2 如果两个对象t1和t2类型相同,则返回true;否则返回false
t1 != t2 如果两个对象t1和t2类型不同,则返回true;否则返回false
t.name() 返回类型的C-style字符串,类型名字由编译器相关的方法产生
t1.before(t2) 返回指出t1是否出现在t2之前的bool值

typeid.name()产生的对象名是由编译器决定的, 所以不同的编译器可能产生的名字并不一样.

typeid形式

typeid有两种形式, 一种在编译期获得类型, 一种在运行时通过RTTI获取类型.

我们先分析编译期就能获得类型, 再分析RTTI获取类型.

编译期获得类型

只要不涉及虚表并且没有基类指针(引用)指向子类的情况都是能在编译期间就可以获得类型的信息.

先来看一下在g++编译器中的基本类型名是什么.

cout << typeid(char).name() << endl;	// c
cout << typeid(short).name() << endl;	// s
cout << typeid
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值