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

0kc*_*ats 1 c++ constexpr c++11

是否有构造constexpr函数的标准方法,该函数允许将double转换为其64位表示形式:

constexpr uint64_t double_to_uint64_t(double d) {
   ??????
}
Run Code Online (Sandbox Code Playgroud)

以便

constexpr uint64_t two_bits = double_to_uint64_t(2.0);
Run Code Online (Sandbox Code Playgroud)

会编译吗?

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

Nic*_*las 5

直到C ++ 20。所有通常的技巧都是完全禁止的(reinterpret_cast)或未定义的行为,并且在编译时执行UB时格式不正确。

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

  • @Yakk-AdamNevraumont:一个大问题是 constexpr 在编译器主机上进行评估。这可能与编译器目标不同。 (2认同)