21 Language support library [language.support]

21.7 Type identification [support.rtti]

Заголовок <typeinfo> определяет тип, связанный с информацией о типе, созданной реализацией. Он также определяет два типа сообщений об ошибках идентификации динамического типа.

21.7.1 Header <typeinfo> synopsis [typeinfo.syn]

namespace std {
  class type_info;
  class bad_cast;
  class bad_typeid;
}

См. Также: [expr.dynamic.cast], [expr.typeid].

21.7.2 Class type_­info [type.info]

namespace std {
  class type_info {
  public:
    virtual ~type_info();
    bool operator==(const type_info& rhs) const noexcept;
    bool operator!=(const type_info& rhs) const noexcept;
    bool before(const type_info& rhs) const noexcept;
    size_t hash_code() const noexcept;
    const char* name() const noexcept;

    type_info(const type_info& rhs) = delete;                   // cannot be copied
    type_info& operator=(const type_info& rhs) = delete;        // cannot be copied
  };
}

Класс type_­info описывает информацию о типе, созданную реализацией. Объекты этого класса эффективно хранят указатель на имя типа и закодированное значение, подходящее для сравнения двух типов на равенство или порядок сортировки. Имена, правила кодирования и последовательность сортировки для типов не определены и могут отличаться в зависимости от программы.

bool operator==(const type_info& rhs) const noexcept;

Effects: Сравнивает текущий объект с rhs.

Returns: true если два значения описывают один и тот же тип.

bool operator!=(const type_info& rhs) const noexcept;

Returns: !(*this == rhs).

bool before(const type_info& rhs) const noexcept;

Effects: Сравнивает текущий объект с rhs.

Returns: true если *this предшествует rhs в порядке сортировки реализации.

size_t hash_code() const noexcept;

Returns: Неуказанное значение, за исключением того, что в рамках одного выполнения программы оно должно возвращать одно и то же значение для любых двух type_­info сравниваемых объектов.

Remarks: Реализация должна возвращать разные значения для двух type_­info объектов, которые не равны для сравнения.

const char* name() const noexcept;

Returns: An реализации определенных НТБ .

Remarks: Сообщение может быть форматом null-terminated multibyte string, подходящим для преобразования и отображенным как wstring ([string.classes], [locale.codecvt])

21.7.3 Class bad_­cast [bad.cast]

namespace std {
  class bad_cast : public exception {
  public:
    bad_cast() noexcept;
    bad_cast(const bad_cast&) noexcept;
    bad_cast& operator=(const bad_cast&) noexcept;
    const char* what() const noexcept override;
  };
}

Класс bad_­cast определяет тип объектов, создаваемых реализацией как исключения для сообщения о выполнении недопустимого dynamic_­cast выражения ([expr.dynamic.cast]).

bad_cast() noexcept;

Effects: Создает объект класса bad_­cast.

bad_cast(const bad_cast&) noexcept; bad_cast& operator=(const bad_cast&) noexcept;

Effects: Копирует объект класса bad_­cast.

const char* what() const noexcept override;

Returns: An реализации определенных НТБ .

Remarks: Сообщение может быть форматом null-terminated multibyte string, подходящим для преобразования и отображенным как wstring ([string.classes], [locale.codecvt])

21.7.4 Class bad_­typeid [bad.typeid]

namespace std {
  class bad_typeid : public exception {
  public:
    bad_typeid() noexcept;
    bad_typeid(const bad_typeid&) noexcept;
    bad_typeid& operator=(const bad_typeid&) noexcept;
    const char* what() const noexcept override;
  };
}

Класс bad_­typeid определяет тип объектов, создаваемых реализацией как исключения для сообщения о нулевом указателе в typeid выражении ([expr.typeid]).

bad_typeid() noexcept;

Effects: Создает объект класса bad_­typeid.

bad_typeid(const bad_typeid&) noexcept; bad_typeid& operator=(const bad_typeid&) noexcept;

Effects: Копирует объект класса bad_­typeid.

const char* what() const noexcept override;

Returns: An реализации определенных НТБ .

Remarks: Сообщение может быть форматом null-terminated multibyte string, подходящим для преобразования и отображенным как wstring ([string.classes], [locale.codecvt])