gpt4 book ai didi

c++ - reinterpret_cast 使 constexpr 函数失败

转载 作者:行者123 更新时间:2023-12-01 14:39:17 29 4
gpt4 key购买 nike

尝试创建一个具有 constexpr 能力的类来重新解释 IEEE double 的位。示例:

constexpr double pi = 3.14159265358979323846;
constexpr fixedpoint a(pi);

但是遇到reinterpret_cast不是常量子表达式的问题。

我在 constexpr fixedpoint& operator=(double rhs) 中使用它:

  uint64_t fraction = *reinterpret_cast<const uint64_t*>(&rhs) & 0x000F'FFFF'FFFF'FFFFull;

但是编译器将该语句标记为非常量子表达式。

尝试了类型双关,但遇到了在 C++ 中只能激活一个字段的约束。

有人有解决方案可以让我重新解释作为有效 constexpr 代码的 double 的位吗?

最佳答案

是的,使用 std::bit_cast ,在 header 中 <bit> :

#include <bit>
#include <cstdint>
constexpr double pi = 3.14159265358979323846;
constexpr auto fraction = std::bit_cast<std::uint64_t>(pi) & 0x000F'FFFF'FFFF'FFFFull;

您需要一个支持 C++20 的编译器。目前没有,但从 Clang 9 开始,您至少可以使用将用于实现 bit_cast 的内置函数。 future :

#if __clang__
constexpr auto fraction = __builtin_bit_cast(std::uint64_t, pi) & 0x000F'FFFF'FFFF'FFFFull;
#endif

Example .

关于c++ - reinterpret_cast 使 constexpr 函数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62236883/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com