运行阶段类型识别RTTI

运行阶段类型识别RTTI

RTTI

RTTI是运行阶段类型识别的简称。目的是为程序在运行阶段确定对象的类型。

C++有3个支持RTTI的元素

  • dynamic_cast,将派生类转成基类指针,出错返回0-空指针
  • typeid返回指向对象类型的值
  • type_info结构存储了类型信息

注意:RTTI只适用于包含虚函数的类

dynamic_cast

1
2
if(ps=dynamic_cast<A*>(b))
ps->say();

dynamic_cast也可以用于引用,但是当转换失败时,没有与空指针对应的引用值,只能配合try语句来捕捉bad_cast异常

1
2
3
4
5
6
7
#include <typeinfo>
try{
A& a=dynamic_cast<A&>(b);
}
catch(bad_cast&){

};

typeid和type_info

typeid能够确定两个对象是否为同一种类型

typeid会返回一个type_info的引用

typeid(A) == typeid(*a)如果a是一个空指针,则引发bad_typeid异常

type_info通常会含有name()成员,返回类的名称

作者

步步为营

发布于

2024-05-08

更新于

2025-03-15

许可协议