У меня есть ранее Ma c -одный код, который генерирует контрольную сумму, используя std::hash<std::string>
[1]. Теперь этот код портирован на Windows. Хотя сборка Ma c использует CLANG, порт Windows скомпилирован с G CC 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
Как узнать, какой алгоритм используют мои компиляторы?
Единственное решение, которое я могу придумать, - это проверить все реализации функций ha sh на некоторых тестовых строках и посмотреть, какие из них соответствуют ...
Долгосрочный подход для этого заключается в использовании идентичных cryptographi c ha sh работает в обоих портах, конечно. Но в настоящее время невозможно пересчитать все контрольные суммы, которые были созданы на данный момент версией Ma c и которые должны проверяться портом Windows.
[1] Да использование
std::hash
для этой задачи было плохим выбором.