RTTI(Run Time Type information): 是编译器在 编译期间 生成的特殊类型信息(type_info),包括对象继承关系,对象本身的描述,RTTI 是为多态而生成的信息,所以 只有具有虚函数的对象才会生成 RTTI。
在 C++ 中,有以下两个函数用于 运行时类型检测:
一、dynamic_cast
语法:
dynamic_cast < new_type > ( expression )
返回类型为 new_type 的值 或 抛出一个异常。
new_type
new_type 必须是指向完整类类型或 void * 的指针或引用。必须是类的指针或引用,或 void*。因为没有对 void 的引用。
expression
expression 必须是指向完整类类型的指针或引用。而且,expression 所代表的类必须包含虚函数。
如果转换成功,dynamic_cast 将返回一个 new_type 的值。 如果转换失败,而且 new_type 是指针,那么将返回NULL; 而如果 new_type 是引用,那么将抛出异常 std::bad_cast。
1.1 实现原理
在 C++ 对象模型 中 , 我们知道,在包含虚函数的类中,会产生一张虚函数表,而虚函数表的前面,还会有一部分额外的信息,用于记录与类相关的信息 —— type_info,比如说,对象继承关系,对象本身的描述等等。
dynamic_c