Cplusplus.com似乎声称如此:
This function returns the same value for any two type_info objects that compare equal,and different values for distinct types that do not. [Emphasis mine]
Cppreference似乎声称:
Returns an unspecifIEd value,which is IDentical for objects,referring to the same type. No other guarantees are given,in particular,the value can change between invocations of the same program. [Emphasis mine]
相关标准段落为:
§ p18.7.1 p7-8
size_t hash_code() const noexcept;
7 Returns: An unspecifIEd value,except that within a single execution of the program,it shall return the same value for any two type_info objects which compare equal.
8 Remark: an implementation should return different values for two type_info objects which do not compare equal. [Emphasis mine]
应该在上述的上下文中“应该”的意思是什么?如果第8段是要求,那么看起来似乎不可能实现,除非运行时在程序中对所有符号名称进行某种全局定义,以确保缺少哈希冲突,这似乎是标准的相当大的负担执行实现,特别是对于一个名为hash_code()的函数. (Itanium实际上需要这个,但是它显然是超出标准的额外要求.)
如果“应该”并不意味着具有约束力,那么这个说法似乎是一个毫无意义的,而且是标准的缺陷,因为要求实现来尝试实现一个不能依赖的困难要求,没有任何价值,只会引起混淆和分裂.任何人知道为什么在那里?
编辑:也许“缺陷”太强了,但至少应该澄清一点可能的混乱,因为它显然是误导了至少一个参考网站,并且过分地误导了任何依赖它的人.此外,实际上可以满足要求(只要实现中支持的类型数量小于size_t的范围),如果在运行时完成全局唯一性,并且不清楚标准是否将此建议为理想的实施策略与否.
解决方法 这个意思对我来说很清楚:这不是一个绝对的要求,因为在某些情况下可能是不可能的,但实施应尽可能地产生独特的价值.我会注意到,哈希码一般也是如此 – 你尝试产生独特的值,但并不总是可能的.
该标准包含大量不可执行的信息.相当一点(但绝对不是全部)是以明确的说明形式,但这并不意味着一个非规范性的外部注释是一个缺陷.
编辑:如果有人想知道ISO如何写标准,他们有一个page of guidelines.
总结以上是内存溢出为你收集整理的c – std :: type_info :: hash_code()的唯一性和“应该”的含义全部内容,希望文章能够帮你解决c – std :: type_info :: hash_code()的唯一性和“应该”的含义所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)