c – std :: type_info :: hash_code()的唯一性和“应该”的含义

c – std :: type_info :: hash_code()的唯一性和“应该”的含义,第1张

概述是否要保证相同的std :: type_info :: hash_code()值意味着相同的类型? Cplusplus.com似乎声称如此: This function returns the same value for any two type_info objects that compare equal, and different values for distinct types th 是否要保证相同的std :: type_info :: hash_code()值意味着相同的类型?

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()的唯一性和“应该”的含义所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1232685.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存