Как реализована type_info - PullRequest
       31

Как реализована type_info

0 голосов
/ 28 февраля 2020

Большинство классов C ++ STL имеют простую для понимания реализацию. Однако класс type_info сбивает с толку. Как некоторый код узнает информацию о классе?

Теория 1:

Моя первая теория заключается в том, что класс type_info получает информацию от компилятора (что означает, что STL имеет некоторую интеграцию с компилятором).

Теория 2:

Это также может быть какой-то неясный синтаксис c ++, о котором я не знаю, но не слишком уверен в этой теории.

1 Ответ

1 голос
/ 03 марта 2020

type_info - это просто стандартный класс библиотеки, который предоставляет информацию о типе. Объекты этого класса возвращаются оператором typeid.

Наибольший интерес представляет не сам класс, а реализация RTTI (идентификация типа во время выполнения). Это чисто зависимая от компилятора функция, часть ABI (двоичный интерфейс приложения).

Вкратце, компилятор хранит информацию о типе для каждого типа polymorphi c вместе с vtable или VMT (таблица виртуальных методов). Эта информация относится к типу, а не к объекту и используется typeid и dynamic_cast. Класс type_info - это просто интерфейс, предоставляемый конечному пользователю, он имеет внутреннюю реализацию в зависимости от компилятора.

Различные компиляторы реализуют разные ABI. Современные компиляторы g cc и clang реализуют Itanium C ++ ABI , который описывает все детали RTTI и все остальное. Microsoft Visual C ++ ABI не имеет документов.

Хорошая статья, описывающая V ++ таблицы C ++ и охватывающая RTTI: Shahar Mike - V ++ таблицы C ++ .

...