c++ - type_info是如何实现的

标签 c++ c++-standard-library typeinfo

大多数 C++ STL 类都有易于理解的实现。然而,type_info 类令人困惑。一些代码如何知道一个类的信息?

理论1:

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

理论2:

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

最佳答案

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

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

简而言之,编译器存储每个多态类型的类型信息及其vtableVMT(虚拟方法表)。此信息是针对每个类型的,而不是针对每个对象的,由 typeiddynamic_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/

相关文章:

c++ - 如何在运行时检查 typeid 是否为指针?

c++ - 区分 C++ 中的多态类型

c++ - 无法在 C++ 中使用迭代执行 for 循环

c++ - 像 std::vector 中的元素一样就地合并

c++ - 使用常量是否节省内存

c++ - 为什么 std::make_unique 等不存在 std::initializer_list 重载?

c++ - 有没有一种符合标准的方法来用 C++ 编写可移植的 ls 实用程序?

c++ - 检查字符串的类型信息时出现奇怪的输出

c++ - 是否可以编写一个像 next_permutation 这样的函数,但它只排列 r 值,而不是 n 值?

c++一次检查所有数组值