有没有一种方法可以构造一个constexpr函数来获取double的位表示形式?

时间:2019-04-19 17:38:19

标签: c++ c++11 constexpr

是否有构造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)也很有趣。

1 个答案:

答案 0 :(得分:5)

直到C ++ 20才出现。所有常见的技巧都是完全禁止的(reinterpret_cast)或未定义的行为,并且在编译时执行UB时格式会变得错误。

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