有没有一种标准方法来构造一个constexpr函数,允许将double转换为64位表示:
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
,所以你可以在编译时使用它。