RTTI全称是Run-Time Type Identification,代表运行时类型识别。一般而言,面向对象编程语言都会支持它,只是支持的形式不太一样。RTTI一般包括类名称、类方法列表、虚函数表、父类子类关系等。一般而言,编译器会生成对应类的相关讯息,并让创建的对象指向相应的讯息,保存在内存中。在运行期,调用RTTI相应的运算符时会自动调用到编译器生成和指向的讯息。C++98标准引入RTTI,dynamic_cast/type_info/typeid都是RTTI的一部分。
- RTTI机制在越高级语言使用范围越广,因为它们有完善的运行时支持。例如,C#/JS/Python/Java/Swift等,可以利用反射获取类型信息。
- C语言不支持RTTI,如需要,可以手动增加结构体"信息"成员和指针,保存变量类型字符串和关联。
- ObjC有一套较为现代化的运行时,例如,[oneObject class]获取Class类信息,NSStringFromClass(oneClass)返回类对应的字符串。
- C++ RTTI机制被加入语言标准,是因为当时很多语言编译器实现商都有各自的RTTI机制,造成了各家不兼容,后来被标准化。
