Timur Doumler 在他最近的演讲“现代C ++中的类型修剪”中说,由于不能从函数返回C样式的数组,std::bit_cast
因此不能用于将a 强制float
转换unsigned char[4]
为a。我们应该使用std::memcpy
或等到C ++ 23(或更高版本)后,类似的东西reinterpret_cast<unsigned char*>(&f)[i]
才能很好地定义。
在C ++ 20中,我们可以在中std::array
使用std::bit_cast
,
float f = /* some value */;
auto bits = std::bit_cast<std::array<unsigned char, sizeof(float)>>(f);
而不是C样式的数组来获取float
?的字节?
struct X { unsigned char elems[5]; };
满足您所引用的规则。当然,可以使用最多4个元素对列表进行初始化。它可以也可以列表初始化5个元素。我认为没有任何标准库实现者会讨厌这样做的人,但是我认为这在技术上是一致的。