为什么C++不使用集中存储类型信息以实现高效的 RTTI

Why C++ does not use centralized storage for type information for efficient RTTI?

本文关键字:信息 实现 高效 RTTI 类型 存储 C++ 集中 为什么      更新时间:2023-10-16

我所知,C++中的每个多态类都包含一个带有损坏类型名称的字符串。RTTI是通过字符串比较实现的。

这是真的吗?实现集中式存储会更有效吗?

使用集中式类型存储,每个对象都可以只保存指向类型信息的指针。动态强制转换可以简单地通过指针比较来实现。

实际实现甚至比每个对象一个指针更有效。

标准禁止向"标准布局"类添加任何数据,因此甚至没有指针的空间,更不用说字符串了。 对于多态类,将有额外的元数据,但在实际实现中,特定于对象的动态类型的所有数据都存储在一起,并且只需要一个指向所有数据的指针。

因此,由于多态对象已经需要指向虚函数调度表的指针,因此存储类型名称的每个对象的增量成本为零。 在函数指针旁边,在向量表中只存储了一个额外的指针,因此无论存在多少个实例,每个多态类型的开销都是一个指针。

多态类包含编译器构建器认为值得放入的内容,没有规则或要求具有任何类型信息。
C++的概念是强类型的,检查 ID 由编译器完成。编译的代码通常针对性能和/或大小进行优化,而不是携带不需要的信息。

当然,一些编译器提供了这个,但这不是语言的精神。