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

C++ 有没有办法构造一个constexpr函数来获得double的位表示?,c++,c++11,constexpr,C++,C++11,Constexpr,是否有一种标准方法来构造允许将double转换为64位表示形式的constexpr函数: constexpr uint64_t double_to_uint64_t(double d) { ?????? } 所以 constexpr uint64_t two_bits = double_to_uint64_t(2.0); 你会编译吗 反向方法uint64到double也很有趣。直到C++20。所有常见的技巧要么是完全禁止的重新解释抛出,要么是未定义的行为,UB在编译时执行时会变得格式错

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

constexpr uint64_t double_to_uint64_t(double d) {
   ??????
}
所以

constexpr uint64_t two_bits = double_to_uint64_t(2.0);
你会编译吗


反向方法uint64到double也很有趣。

直到C++20。所有常见的技巧要么是完全禁止的重新解释抛出,要么是未定义的行为,UB在编译时执行时会变得格式错误


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

直到C++20。所有常见的技巧要么是完全禁止的重新解释抛出,要么是未定义的行为,UB在编译时执行时会变得格式错误


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

我只对double是IEEE-754 64位浮点类型的平台感兴趣。哪种表示法?相同的值?编译器硬件?目标平台硬件?你说的64位表示法到底是什么意思?我想得到一个与memcpy&bits,&d,sizeofdouble等效的结果,其中bits是uint64_t,d是double。我只对double是IEEE-754 64位浮点类型的平台感兴趣。哪种表示法?相同的值?编译器硬件?目标平台硬件?你说的64位表示法到底是什么意思?我想得到一个与memcpy&bits,&d,sizeofdouble等价的结果,其中位是uint64_t,d是double。通过指向char的指针按字节读取double不是UB,也不是将其复制到无符号int。执行constexpr,然而…@Yakk AdamNevraumont:一个大问题是constexpr是在编译器主机上计算的。这可能与编译器目标不同。通过指向char的指针读取双字节不是UB,也不是将其复制到无符号int。但是,执行constexpr…@Yakk AdamNevraumont:一个大问题是constexpr是在编译器主机上计算的。这可能与编译器目标不同。