gpt4 book ai didi

c++ - 如何在 C++ 中获得没有 UB 的浮点位表示?

转载 作者:行者123 更新时间:2023-11-30 04:43:16 27 4
gpt4 key购买 nike

据我所知,所有“传统”方法都是这样做的,即指针的 reinterpret_castunionintfloat 字段是 UB,因为它违反了严格的别名 (in C++, not in C)。
那么,如何在没有未定义行为的情况下正确地做到这一点呢?

我可以对 char * 执行 reinterpret_cast 并将其 memcpy 到 uint32_t 吗?或者也许 std::launder 会有帮助?

最佳答案

标准方法,如 Jason Turner 所指出的那样, 就是使用memcpy:

float f = 1.0;
std::byte c[sizeof(f)];
memcpy(c, &f, sizeof(f));

您可能认为您不想复制任何东西,您只想查看位/字节。好吧,编译器很聪明,他们实际上会像 Jason 所展示的那样优化它,所以不要担心并使用 memcpy 来处理这种事情,永远不要 reinterpret_cast

关于c++ - 如何在 C++ 中获得没有 UB 的浮点位表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58367350/

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