c – std :: type_info :: hash_code()的唯一性和“应该”的含义
是否要保证相同的std :: type_info :: hash_code()值意味着相同的类型?
Cplusplus.com似乎声称如此:
Cppreference似乎声称:
相关标准段落为:
应该在上述的上下文中“应该”的意思是什么?如果第8段是要求,那么看起来似乎不可能实现,除非运行时在程序中对所有符号名称进行某种全局定义,以确保缺少哈希冲突,这似乎是标准的相当大的负担执行实现,特别是对于一个名为hash_code()的函数. (Itanium实际上需要这个,但是它显然是超出标准的额外要求.) 如果“应该”并不意味着具有约束力,那么这个说法似乎是一个毫无意义的,而且是标准的缺陷,因为要求实现来尝试实现一个不能依赖的困难要求,没有任何价值,只会引起混淆和分裂.任何人知道为什么在那里? 编辑:也许“缺陷”太强了,但至少应该澄清一点可能的混乱,因为它显然是误导了至少一个参考网站,并且过分地误导了任何依赖它的人.此外,实际上可以满足要求(只要实现中支持的类型数量小于size_t的范围),如果在运行时完成全局唯一性,并且不清楚标准是否将此建议为理想的实施策略与否. 解决方法
这个意思对我来说很清楚:这不是一个绝对的要求,因为在某些情况下可能是不可能的,但实施应尽可能地产生独特的价值.
我会注意到,哈希码一般也是如此 – 你尝试产生独特的值,但并不总是可能的. 该标准包含大量不可执行的信息.相当一点(但绝对不是全部)是以明确的说明形式,但这并不意味着一个非规范性的外部注释是一个缺陷. 编辑:如果有人想知道ISO如何写标准,他们有一个page of guidelines. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |