Dans son récent discours «Type punning en C ++ moderne», Timur Doumler a déclaré que std::bit_castcela ne peut pas être utilisé pour convertir un bit floaten un unsigned char[4]car les tableaux de style C ne peuvent pas être renvoyés d'une fonction. Nous devons utiliser std::memcpyou attendre C ++ 23 (ou version ultérieure) lorsque quelque chose comme reinterpret_cast<unsigned char*>(&f)[i]cela deviendra bien défini.
En C ++ 20, pouvons-nous utiliser un std::arrayavec std::bit_cast,
float f = /* some value */;
auto bits = std::bit_cast<std::array<unsigned char, sizeof(float)>>(f);
au lieu d'un tableau de style C pour obtenir des octets d'un float?
struct X { unsigned char elems[5]; };satisfait la règle que vous citez. Il peut certainement être initialisé par liste avec jusqu'à 4 éléments. Il peut également être initialisé par liste avec 5 éléments. Je ne pense pas qu'un implémenteur de bibliothèque standard déteste suffisamment les gens pour le faire, mais je pense que c'est techniquement conforme.