Nel suo recente discorso "Digitare la punzonatura nel moderno C ++" Timur Doumler ha affermato che std::bit_cast
non può essere utilizzato per eseguire il bit di bit float
in un unsigned char[4]
perché gli array in stile C non possono essere restituiti da una funzione. Dovremmo usare std::memcpy
o 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::array
con 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.