有没有办法构造一个 constexpr 函数来获取双精度的位表示
Is there a way to construct a constexpr function to get bit representation of a double?
有没有一种标准方法来构造一个允许将双精度转换为 64 位表示的 constexpr 函数:
constexpr uint64_t double_to_uint64_t(double d) {
??????
}
因此
constexpr uint64_t two_bits = double_to_uint64_t(2.0);
会编译吗?
反向方法(uint64 到双倍(也很有趣。
直到C++20。所有常见的技巧要么是完全禁止的(reinterpret_cast
(,要么是未定义的行为,UB在编译时执行时会变得格式不正确。
C++20 提供了 std::bit_cast
,它在两种类型之间进行二进制转换,只要它们都是可复制的并且具有相同的大小。并且该函数是constexpr
的,因此您可以在编译时使用它。
相关文章:
- 条件constexpr函数
- constexpr 函数中的非文字(通过 std::is_constant_evaluated)
- constexpr构造函数需要常量成员函数时出现问题
- constexpr 函数获取常量字符*
- 如何在 constexpr 函数中实现回退运行时
- 为什么我不能在 constexpr lambda 函数中使用 std::tuple
- 在非 constexpr 函数中作为左值传递的变量上使用 'constexpr' 函数
- 在 constexpr 构造函数 (c++17) 中赋值到 const char * 在使用 Android NDK 时
- NVCC 错误:string_view.h:constexpr 函数返回是非常量
- constexpr函数中的静态constexpr变量
- 在 constexpr funnction 中调用basic_string函数
- 为什么我的 constexpr 对象在我的函数中不是 constexpr?
- constexpr log10 整数函数
- C++:初始化 constexpr 构造函数中的成员数组
- 编译器生成的默认构造函数具有 constexpr 混淆行为
- 在 constexpr 构造函数中初始化数组是否合法?
- 在 constexpr 函数中断言
- MSVC 和函数参数的 constexpr?
- 具有位域的结构的 Constexpr 构造函数
- C++ 默认构造函数 constexpr 或正确未定义