[英]Are C++ std::hash implementations always deterministic?
我知道std::hash<T>
是依赖于实现的,但它们应该是确定性的吗?
我知道如果我在同一个进程中多次运行std::hash<T>
函数,我会得到相同的输出。 但是,如果我重新启动该过程,我会获得相同的值吗? 是否有用于std :: hash的种子? 它取决于编译器版本还是其他因素?
是否保证使用输入X
我将始终获得输出Y
无论过程运行何时启动,机器还是编译器版本?
不, 文档清楚地说明:
哈希函数只需要在程序的单次执行中为相同的输入产生相同的结果; 这允许盐渍哈希防止碰撞DoS攻击。
重点是我的。 这是从C ++ 14开始,但是我们不能假设它可以在C ++ 11中运行,因为没有明确提供这样的保证。
启用std::hash
符合Hash
要求([hash.requirements]),根据该要求
返回的值仅取决于参数...对于程序的持续时间。
无法保证哈希值在调用之间是稳定的,即使这些调用在同一台机器上具有相同的二进制映像。
根据c ++标准 ,
哈希函数只需要在程序的单次执行中为相同的输入产生相同的结果; 这允许盐渍哈希防止碰撞DoS攻击。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.