有没有办法构造一个 constexpr 函数来获取双精度的位表示?

Is there a way to construct a constexpr function to get bit representation of a double?

是否有一种标准方法来构造允许将双精度转换为 64 位表示的 constexpr 函数:

constexpr uint64_t double_to_uint64_t(double d) {
   ??????
}

所以

constexpr uint64_t two_bits = double_to_uint64_t(2.0);

会编译吗?

反向方法(uint64 到 double)也很有趣。

直到 C++20。所有常用的技巧要么被完全禁止(reinterpret_cast)要么是未定义的行为,并且 UB 在编译时执行时变得格式错误。

C++20 提供了 std::bit_cast,它在两种类型之间进行二进制转换,只要它们都是普通可复制的并且具有相同的大小。并且函数是constexpr,所以你可以在编译时使用它。