gpt4 book ai didi

c++ - std::bit_cast 与 std::array

转载 作者:行者123 更新时间:2023-12-03 02:47:33 27 4
gpt4 key购买 nike

在他最近的演讲中“Type punning in modern C++”帖木儿·杜姆勒 saidstd::bit_cast不能用于位转换 float进入unsigned char[4]因为 C 风格的数组不能从函数返回。我们应该使用 std::memcpy或者等到 C++23(或更高版本)时,类似 reinterpret_cast<unsigned char*>(&f)[i]将变得明确。

在 C++20 中,我们可以使用 std::arraystd::bit_cast ,

float f = /* some value */;
auto bits = std::bit_cast<std::array<unsigned char, sizeof(float)>>(f);

而不是 C 样式数组来获取 float 的字节?

最佳答案

是的,这适用于所有主要编译器,并且据我从标准中可以看出,它是可移植的并且保证可以工作。

首先,std::array<unsigned char, sizeof(float)>保证是一个聚合 ( https://eel.is/c++draft/array#overview-2 )。由此可见,它恰好包含 sizeof(float)数量char s 内部(通常为 char[] ,尽管 afaics 标准没有强制执行此特定实现 - 但它确实规定元素必须是连续的)并且不能有任何其他非静态成员。

因此它是可以简单复制的,并且其大小与 float 的大小相匹配。以及。

这两个属性允许您bit_cast他们之间。

关于c++ - std::bit_cast 与 std::array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58320316/

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