Класс type_info
Класс type_info описывает сведения о типе, созданные в программе компилятором. Объекты этого класса эффективно сохраняют указатель на имя для типа. Класс type_info также сохраняет закодированное значение, подходящее для сравнения двух типов для равенства или сортировки порядка. Правила кодирования и последовательность размещения типов не указаны и могут различаться в разных программах.
Файл <typeinfo>
заголовка должен быть включен для использования класса type_info . Интерфейс для класса type_info :
class type_info {
public:
type_info(const type_info& rhs) = delete; // cannot be copied
virtual ~type_info();
size_t hash_code() const;
_CRTIMP_PURE bool operator==(const type_info& rhs) const;
type_info& operator=(const type_info& rhs) = delete; // cannot be copied
_CRTIMP_PURE bool operator!=(const type_info& rhs) const;
_CRTIMP_PURE int before(const type_info& rhs) const;
size_t hash_code() const noexcept;
_CRTIMP_PURE const char* name() const;
_CRTIMP_PURE const char* raw_name() const;
};
Невозможно создать экземпляры объектов класса type_info напрямую, так как класс имеет только закрытый конструктор копирования. Единственным способом создания (временного) объекта type_info является использование оператора typeid . Так как оператор назначения также является частным, нельзя копировать или назначать объекты класса type_info.
type_info::hash_code
определяет хэш-функцию, подходящую для сопоставления значений типа typeinfo с распределением значений индекса.
Операторы ==
и !=
могут использоваться для сравнения равенства и неравенства с другими объектами type_info соответственно.
Нет связи между порядком размещения типов и отношениями наследования. Используйте функцию-член, type_info::before
чтобы определить последовательность сортировки типов. Нет никаких гарантий, что type_info::before
приведет к тому же результату в разных программах или даже разных запусках одной и той же программы. Таким образом, type_info::before
он аналогичен оператору (&)
адреса.
Функция-член type_info::name
возвращает const char*
строку, завершающую значение NULL, представляющую удобочитаемое пользователем имя типа. Указываемая память кэшируется. Ее никогда не следует освобождать напрямую.
Функция-член type_info::raw_name
является конкретной корпорацией Майкрософт. const char*
Возвращается в строку, завершающуюся значением NULL, представляющую украшенное имя типа объекта. Имя хранится в украшенной форме, чтобы сэкономить место. Следовательно, эта функция быстрее, чем type_info::name
из-за того, что не требуется отменять имя. Строка, возвращаемая type_info::raw_name
функцией, полезна в операциях сравнения, но не является доступной для чтения. Если вам нужна читаемая для человека строка, используйте type_info::name
вместо этого.
Сведения о типе создаются для полиморфных классов, только если указан параметр компилятора /GR (Enable Run-Time Type Information).
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по