Nel suo recente discorso "Digitare la punzonatura nel moderno C ++" Timur Doumler ha affermato che std::bit_castnon può essere utilizzato per eseguire il bit di bit floatin un unsigned char[4]perché gli array in stile C non possono essere restituiti da una funzione. Dovremmo usare std::memcpyo attendere fino a C ++ 23 (o successivo) quando qualcosa del genere reinterpret_cast<unsigned char*>(&f)[i]diventerà ben definito.
In C ++ 20, possiamo usare un std::arraycon std::bit_cast,
float f = /* some value */;
auto bits = std::bit_cast<std::array<unsigned char, sizeof(float)>>(f);
invece di un array in stile C per ottenere byte di un float?
struct X { unsigned char elems[5]; };soddisfa la regola che stai citando. Può certamente essere inizializzato in elenco con un massimo di 4 elementi. Può anche essere inizializzato in elenco con 5 elementi. Non credo che nessun implementatore di librerie standard odia le persone abbastanza da farlo, ma penso che sia tecnicamente conforme.