C++之RTTI机制

2023年 11月 22日 65.1k 0

RTTI简介

RTTI(Runtime Type Indentification) 即运行阶段类型识别。这是 C++新引进的特性之一。RTTI旨在为程序在运行阶段确定对象的类型提供一种标准方式。

这RTTI听起来是不是有点java中反射的味道?大差不差...

在C++中,只有类中包含了虚函数时才会启用RTTI机制,也就是当存在多态时才会存在RTTI机制,因为不存在多态的话在编译阶段既可以确定类型信息。

运行时类型识别(RTTI)功能主要由以下两个运算符实现:

  • typeid运算符,用于返回表达式的类型
  • dynamic_cast运算符,用于将基类的指针或引用安全地转换成派生类的指针

RTTI与dynamic_cast

我们知道C++中的多态是基于虚函数的方式实现的,而含有虚函数的类都会有一个对应的虚函数表,而这个虚函数表会存有相关类型的type_info的地址, 因而可以说dynamic_cast为RTTI的一个应用。

因为dynamic_cast使用RTTI,所以它在转换的过程中是可靠的,只有进行转换的指针确实是指向指定的类型时才会转换成功,否则就会转换失败,返回空指针。

例如以下的例子,第27行和第28行通过new不同的对象类型,会影响到第29行dynamic_cast的转换结果:

#include
class Base {
public:
Base(){

}
virtual ~Base() {

}
virtual void f(){
std::cout

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论