uint32_t Seed() {
uint64_t seed = GetSomeReasonable64BitIntegerSeed();
return *(uint32_t*)&seed ^ *((uint32_t*)&seed + 1);
}
Выше не настоящий код, но это в основном то, что делает настоящий код. Я получил предупреждение от g ++ о том, что он нарушает строгие псевдонимы, погуглил, и ладно, я хочу это исправить. Я нашел этот вопрос, но он не дает четкого решения, кроме используя memcpy
, или полагаясь на неопределенное, но практически беспроблемное поведение, то есть на доступ к неустановленному члену объединения.
На данный момент я могу придумать следующие варианты:
- Используйте
memcpy
. - Используйте
union
и скомпилируйте эту часть как C, где стандарт языка позволяет использовать каламбур с помощью объединений.
std::bit_cast
. Но на самом деле это проблема XY, которая вообще не требует набора текста. - person phuclv   schedule 16.11.2020