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

问题描述 投票:1回答:1

有没有一种标准方法来构造一个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++ c++11 constexpr
1个回答
5
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.