Сравнение двух type_info из оператора typeid () - PullRequest
0 голосов
/ 25 ноября 2018

Можно ли сравнивать результаты двух результатов typeid ()?У cppreference есть следующее примечание об этом операторе:

Нет гарантии, что один и тот же экземпляр std :: type_info будет указан во всех оценках выражения typeid того же типа, хотя std :: type_info:: hash_code этих объектов type_info будет идентичен, как и их std :: type_index.

const std::type_info& ti1 = typeid(A);
const std::type_info& ti2 = typeid(A);

assert(&ti1 == &ti2); // not guaranteed
assert(ti1.hash_code() == ti2.hash_code()); // guaranteed
assert(std::type_index(ti1) == std::type_index(ti2)); // guaranteed

Насколько я понимаю, возвращаемая часть является ссылкой на статическое значение L типа type_info,Здесь говорится, что & ti1 == & ti2 не обязательно будет одинаковым для одних и тех же типов.Вместо этого он говорит использовать хеш-код или класс std :: type_index.Однако не упоминается, если сравнивать типы напрямую:

ti1 == ti2; 

гарантированно будет истинным.Я использовал это раньше, означает ли документация, что это гарантировано?

1 Ответ

0 голосов
/ 25 ноября 2018

std::type_info является типом класса, что означает, что выражение ti1 == ti2 вызовет перегруженный operator==.Его поведение описывается как [type.info] / p2 :

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

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

Возвращает : true, если два значения описывают одного типа .

...