Используя идентификацию типа времени исполнения (run-time type identification — RTTI) можно определить тип объекта во время исполнения программы. Для этого используется функция typeid. Для использования этой функции необходимо включить заголовочный файл typeinfo.h. Общая форма записи функции typeid имеет следующий вид:
typeid (объект)
Здесь объект является объектом, чей тип требуется определить. В C++ для динамической идентификации типов[1] применяются операторы dynamic_cast и typeid (определён в файле typeinfo.h), для использования которых информацию о типах во время выполнения обычно необходимо добавить через опции компилятора при компиляции модуля.
Оператор dynamic_cast пытается выполнить приведение к указанному типу с проверкой. Целевой тип операции должен быть типом указателя, ссылки или void*.
Если целевой тип — тип указателя, то аргументом должен быть указатель на объект класса.
Если целевой тип — ссылка, то аргумент должен также быть соответствующей ссылкой.
Если целевым типом является void*, то аргумент также должен быть указателем, а результатом операции будет указатель, с помощью которого можно обратиться к любому элементу «самого производного» класса иерархии, который сам не может быть базовым ни для какого другого класса.
Оператор typeid возвращает ссылку на структуру type_info, которая содержит поля, позволяющие получить информацию о типе.
Исключение типа bad_cast возникает, когда применяется оператор dynamic_cast к ссылочному типу и происходит ошибка при проверки времени выполнения (например, если тип не входит в отношения наследования), а также из-за std::use_facet, когда требуемый аспект не существует в текущей локализации.
class bad_cast : public exception