背景
RTTI的英文全称是"Runtime Type Identification",中文称为"运行时类型识别",它指的是程序在运行的时候才确定需要用到的对象是什么类型的。用于在运行时(而不是编译时)获取有关对象的信息。
在C++中,由于存在多态行为,基类指针或者引用指向一个派生类,而其指向的真正类型,在编译阶段是无法知道的:
Base *b = new Derived;
Base &b1 = *b;
在上述代码中,如果想知道b的具体类型,只能通过其他方式,而RTTI正是为了解决此问题而诞生,也就是说在运行时,RTTI可以通过特有的方式来告诉调用方其所调用的对象具体信息,一般有如下几种:
typeid操作符;type_info类;dynamic_cast操作符;
typeid 和 type_info
typeid是C++的关键字之一,等同于sizeof这类的操作符。用来获取类型、变量、表达式的类型信息,适用于C++基础类型、内置类、用户自定义类、模板类等。有如下两种形式:
typeid(type)typeid(expr)
#include <cassert>
#include <iostream>
#include <typeinfo>
class Base {
public:
vi

最低0.47元/天 解锁文章
1752

被折叠的 条评论
为什么被折叠?



