为什么C++不使用集中存储类型信息以实现高效的 RTTI
Why C++ does not use centralized storage for type information for efficient RTTI?
据
我所知,C++中的每个多态类都包含一个带有损坏类型名称的字符串。RTTI是通过字符串比较实现的。
这是真的吗?实现集中式存储会更有效吗?
使用集中式类型存储,每个对象都可以只保存指向类型信息的指针。动态强制转换可以简单地通过指针比较来实现。
实际实现甚至比每个对象一个指针更有效。
标准禁止向"标准布局"类添加任何数据,因此甚至没有指针的空间,更不用说字符串了。 对于多态类,将有额外的元数据,但在实际实现中,特定于对象的动态类型的所有数据都存储在一起,并且只需要一个指向所有数据的指针。
因此,由于多态对象已经需要指向虚函数调度表的指针,因此存储类型名称的每个对象的增量成本为零。 在函数指针旁边,在向量表中只存储了一个额外的指针,因此无论存在多少个实例,每个多态类型的开销都是一个指针。
多态类包含编译器构建器认为值得放入的内容,没有规则或要求具有任何类型信息。
C++的概念是强类型的,检查 ID 由编译器完成。编译的代码通常针对性能和/或大小进行优化,而不是携带不需要的信息。
当然,一些编译器提供了这个,但这不是语言的精神。
相关文章:
- 正在查找文档以获得PS4平台的C++中的设备信息
- 如果没有malloc,链表实现将失败
- 如何在c++中实现处理器调度模拟器
- 如何在c++中使用引用实现类似python的行为
- 实现无开销push_back的最佳方法是什么
- 如何实现具有多个平台__FILE__和__LINE__信息的 C/C++ 可变参数日志记录宏?
- std::extent 实现详细信息说明
- 我可以为 C++ 类提供不完整的标头以隐藏实现详细信息吗?
- 使用TDD时隐藏文件访问实现详细信息
- 为什么C++不使用集中存储类型信息以实现高效的 RTTI
- 实现 std::tuple 的详细信息
- 寻找教程或基本信息,让我开始在C#中为初学者实现C/C++API
- 模板或函数参数作为 doxygen 中的实现详细信息
- 如何实现高效的C++运行时统计信息
- 创建一个体素系统并陷入困境,发现自己需要关于如何实现它的信息
- 向Doxygen隐藏模板实现详细信息
- 通过内部指针隐藏实现详细信息
- C++Stdlib IO实现详细信息
- 视觉 C++标准是否指定编译器的 STL 实现详细信息
- VB和C++ActiveX控件以不同的方式保存其信息,如何实现C++ActiveX控件来代替VB ActiveX