Как и в случае любых ха sh, возможны коллизии :
Возвращает неопределенное значение, так что для всех type_info
объектов, относящихся к одному и тому же типу, их hash_code()
- то же самое.
Других гарантий не дано: type_info
объекты, относящиеся к разным типам, могут иметь одинаковые hash_code
(хотя стандарт рекомендует, чтобы реализации избегали этого в максимально возможной степени), и hash_code
для одного и того же типа может меняться между вызовами одной и той же программы.
( ref )
(последняя фраза особенно интересно.)
Какая из двух функций вы хотите использовать, зависит от того, что вы пытаетесь сделать. Как правило, type_index()
это то, что вы ищете. Он однозначно идентифицирует тип. Если вам нужен ключ для ассоциативного контейнера, эффективный хеш-код type_index()
равен hash_code()
.
Я не могу придумать причину, по которой вам когда-либо понадобится использовать hash_code()
самостоятельно, если только вы по какой-то причине не пытаетесь избежать type_index()
(или вы обнаружите, что вам нужно указать хешер самостоятельно), хотя в статье по ссылке есть пример такой реализации.