如何找出我的C ++编译器用于std :: hash的特定算法?

问题描述 投票:0回答:1

我有一个以前只有Mac的代码,可以使用std::hash<std::string> [1]生成校验和。现在,此代码已移植到Windows。当Mac版本使用CLANG时,Windows端口使用GCC g ++编译。可以预期的(std::hash取决于实现),两个编译器的结果都不同:

# Windows: g++.exe (Rev2, Built by MSYS2 project) 9.2.0
std::hash("hello world"): 5577293430985752569
# Mac: Apple clang version 11.0.3 (clang-1103.0.32.29)
std::hash("hello world"): 12386028635079221413

我如何找出编译器正在使用的算法?

我唯一想到的解决方案是在某些测试字符串上探查所有哈希函数实现,并查看匹配的字符串...

当然,长期的方法是在两个端口中使用相同的加密哈希函数。但是,目前无法重新计算Mac版本到目前为止创建的所有校验和,并且必须通过Windows端口进行验证。


[1]是的,首先将std::hash用于此任务是一个错误的选择。
c++ hash stl c++14
1个回答
1
投票
要直接回答您的问题,哈希实现不是编译器的一部分,而是标准库实现的一部分。在Mac上,几乎可以肯定,您正在使用libc ++,并且哈希实现为here。在Windows上,您应该能够找到实现here

对于这两种方法,您都需要进行更多搜索-这些仅仅是起点。

© www.soinside.com 2019 - 2024. All rights reserved.