是否有构造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)也很有趣。
答案 0 :(得分:5)
直到C ++ 20才出现。所有常见的技巧都是完全禁止的(reinterpret_cast
)或未定义的行为,并且在编译时执行UB时格式会变得错误。
C ++ 20提供了std::bit_cast
,它可以在两种类型之间进行二进制转换,只要它们都是可复制的并且具有相同的大小即可。该函数为constexpr
,因此您可以在编译时使用它。