type_info是如何实现的

How is type_info implemented

大多数 c++ STL classes 都有易于理解的实现。但是,type_info class 令人困惑。某些代码如何知道 class 的信息?

理论 1:

我的第一个理论是 type_info class 从编译器获取信息(这意味着 STL 与编译器有一些集成)。

理论 2:

也可能是一些我不知道的晦涩的c++语法,但我不太确定这个理论。

type_info 只是一个提供类型信息的标准库 class。此 class 的对象由 typeid 运算符返回。

最感兴趣的不是 class 本身,而是 RTTI(运行-时间类型识别)的实现。这是一个纯粹依赖于编译器的特性,是 ABI(应用程序二进制接口)的一部分。

简而言之,编译器存储每个多态类型的类型信息及其 vtableVMT(虚拟方法 Table).此信息是按类型而非按对象提供的,由 typeiddynamic_cast 使用。 type_info class 只是提供给最终用户的接口,它有一个内部实现取决于编译器。

不同的编译器实现不同的 ABI。现代 gcc 和 clang 编译器实现 Itanium C++ ABI,它描述了 RTTI 和其他部分的所有细节。 Microsoft Visual C++ ABI 未记录。

一篇描述 C++ vtable 并涵盖 RTTI 的好文章:Shahar Mike - C++ vtables