运行阶段类型识别RTTI
RTTI
RTTI是运行阶段类型识别的简称。目的是为程序在运行阶段确定对象的类型。
C++有3个支持RTTI的元素
- dynamic_cast,将派生类转成基类指针,出错返回0-空指针
- typeid返回指向对象类型的值
- type_info结构存储了类型信息
注意:RTTI只适用于包含虚函数的类
dynamic_cast
1 | if(ps=dynamic_cast<A*>(b)) |
dynamic_cast也可以用于引用,但是当转换失败时,没有与空指针对应的引用值,只能配合try语句来捕捉bad_cast异常
1 |
|
typeid和type_info
typeid能够确定两个对象是否为同一种类型
typeid会返回一个type_info的引用
typeid(A) == typeid(*a)
如果a是一个空指针,则引发bad_typeid异常
type_info通常会含有name()成员,返回类的名称
运行阶段类型识别RTTI