En su reciente charla "Punking de tipo en C ++ moderno", Timur Doumler dijo que std::bit_cast
no se puede usar para convertir un bit float
en un unsigned char[4]
porque las matrices de estilo C no se pueden devolver de una función. Deberíamos usar std::memcpy
o esperar hasta C ++ 23 (o posterior) cuando algo así reinterpret_cast<unsigned char*>(&f)[i]
esté bien definido.
En C ++ 20, ¿podemos usar un std::array
con std::bit_cast
,
float f = /* some value */;
auto bits = std::bit_cast<std::array<unsigned char, sizeof(float)>>(f);
en lugar de una matriz de estilo C para obtener bytes de a float
?
struct X { unsigned char elems[5]; };
satisface la regla que está citando. Ciertamente se puede inicializar en una lista con hasta 4 elementos. Puede también ser inicializado lista con los 5 elementos. No creo que ningún implementador de biblioteca estándar odie a las personas lo suficiente como para hacer esto, pero creo que es técnicamente conforme.