类型信息是如何实现的 大多数C++ STL类都易于理解实现。但是,type_info类令人困惑。一些代码如何知道类的信息 理论1:

类型信息是如何实现的 大多数C++ STL类都易于理解实现。但是,type_info类令人困惑。一些代码如何知道类的信息 理论1:,c++,c++-standard-library,typeinfo,C++,C++ Standard Library,Typeinfo,我的第一个理论是type_info类从编译器获取信息,这意味着STL与编译器有一些集成 理论2: 它也可以是一些我不知道的晦涩的C++语法,但是我对这个理论不太肯定。 < p>类型yIn信息只是一个提供类型信息的标准库类。此类的对象由typeid运算符返回 最令人感兴趣的不是类本身,而是RTTI运行时类型识别实现。这是一个完全依赖于编译器的特性,是ABI应用程序二进制接口的一部分 简而言之,编译器存储每个多态类型的类型信息及其vtable或VMT虚拟方法表。此信息是按类型而不是按对象提供的,由t

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

理论2:

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

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

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

简而言之,编译器存储每个多态类型的类型信息及其vtable或VMT虚拟方法表。此信息是按类型而不是按对象提供的,由typeid和dynamic_cast使用。type_info类只是提供给最终用户的一个接口,它有一个内部实现,具体取决于编译器

不同的编译器实现不同的ABI。现代gcc和clang编译器实现,它描述了RTTI和其他的所有细节。微软VisualC++ + ABI是未记录的。

一篇描述C++ VTABLE和覆盖RTTI:./P>的好文章,可以下载GNU或CLAN编译器的源代码,并找到Out.Type信息只是STL库中定义的一种类型。这种类型的实现非常简单:在stdlibc++上,它只是一个具有用于存储名称的内部常量char*的类。可能更有趣的是返回该对象的运算符typeid。这是一个运算符,因此由编译器处理。您可以很容易地查看assembly.type_info类本身不需要与编译器集成—它只封装了几段数据。typeid操作符当然是在编译器中本机实现的。它也是编译器为每个类准备type_info的实例,然后typeid可能返回。也就是说,标准库工件需要编译器支持并不罕见。例如,一些类型特征说,std::是可复制的,否则是不可能实现的。@IgorTandetnik我想你基本上已经回答了这个问题,所以你应该把这些信息放在答案中。