如何在 C++ 中获得没有 UB 的浮点位表示?

How to get float bit representation without UB in C++?

据我所知,所有 'traditional' 方法都可以做到这一点,即 reinterpret_cast 指针和 union 以及 intfloat 字段UB 是否违反了严格的别名 (in C++, not in C)。
那么,如何在没有未定义行为的情况下正确地做到这一点呢?

我可以做一个 reinterpret_castchar * 然后 memcpy 到 uint32_t 吗?或者也许std::launder会有帮助?

正如 Jason Turner 所指出的那样,标准方法是使用 memcpy:

float f = 1.0;
std::byte c[sizeof(f)];
memcpy(c, &f, sizeof(f));

您可能认为您不想复制任何内容,只想查看 bits/bytes。好吧,编译器很聪明,他们实际上会像 Jason 所展示的那样优化它,所以不要担心,对这种事情使用 memcpy 而永远不要 reinterpret_cast.