大多数 C++ STL 类都有易于理解的实现。然而,type_info
类令人困惑。一些代码如何知道一个类的信息?
理论1:
我的第一个理论是 type_info
类从编译器获取信息(这意味着 STL 与编译器有一定的集成)。
理论2:
也可能是一些我不知道的晦涩的 C++ 语法,但我对这个理论不太确定。
最佳答案
type_info
只是一个提供类型信息的标准库类。此类的对象由 typeid
运算符返回。
最令人感兴趣的不是类本身,而是 RTTI(运行时类型识别)实现。这是一个纯粹依赖于编译器的功能,是 ABI(应用程序二进制接口(interface))的一部分。
简而言之,编译器存储每个多态类型的类型信息及其vtable或VMT(虚拟方法表)。此信息是针对每个类型的,而不是针对每个对象的,由 typeid
和 dynamic_cast
使用。 type_info
类只是提供给最终用户的接口(interface),它有一个内部实现,具体取决于编译器。
不同的编译器实现不同的 ABI。现代 gcc 和 clang 编译器实现 Itanium C++ ABI ,它描述了 RTTI 和其余部分的所有细节。 Microsoft Visual C++ ABI 未记录。
一篇描述 C++ vtable 并涵盖 RTTI 的好文章:Shahar Mike - C++ vtables .
关于c++ - type_info是如何实现的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60454989/