C++ RTTI(runtime type identification)


RTTI是Runtime Type Identification的缩写,意思是运行时类型识别。C++引入这个机制是为了让程序在运行时能根据基类的指针或引用来获得该指针或引用所指的对象的实际类型。

1 RTTI的使用

RTTI即运行时类型识别(runtime type identification),用于判断指针或引用所绑定对象的动态类型,由两个操作实现:

  1. typeid返回表达式的类型。
  2. dynamic_cast将基类指针或引用安全地转换为派生类的指针或引用。

2 typeid

下面说说,typeid对静态类型的表达式和动态类型的表达式的处理和实现。

2.1 typeid识别静态类型

当typeid中的操作数是如下情况之一时,typeid运算符指出操作数的静态类型,即编译时的类型。
(1)类型名
(2)一个基本类型的变量
(3)一个具体的对象
(4)一个指向不含有virtual函数的类对象的指针的解引用
(5)一个指向不含有virtual函数的类对象的引用
静态类型在程序的运行过程中并不会改变,所以并不需要在程序运行时计算类型,在编译时就能根据操作数的静态类型,推导出其类型信息。例如如下的代码片断,typeid中的操作数均为静态类型:

class X  {
     ...... // 具有virtual函数 }; 
class XX : public X  {
    ...... // 具有virtual函数}; 
class Y  {
    ...... // 没有virtual函数}; 
 
int mai
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值