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个元素。我认为没有任何标准库实现者会讨厌这样做的人,但是我认为这在技术上是一致的。