In seinem kürzlich gehaltenen Vortrag "Type punning in modernem C ++" sagte Timur Doumler , dass std::bit_castdies nicht zum Bit-Casting floatin ein verwendet werden kann, unsigned char[4]da Arrays im C-Stil nicht von einer Funktion zurückgegeben werden können. Wir sollten entweder std::memcpyC ++ 23 (oder später) verwenden oder warten, bis etwas wie reinterpret_cast<unsigned char*>(&f)[i]gut definiert wird.
Können wir in C ++ 20 ein std::arraymit verwenden std::bit_cast,
float f = /* some value */;
auto bits = std::bit_cast<std::array<unsigned char, sizeof(float)>>(f);
anstelle eines C-artigen Arrays, um Bytes eines float?
struct X { unsigned char elems[5]; };der von Ihnen angegebenen Regel entspricht. Es kann sicherlich mit bis zu 4 Elementen listinitialisiert werden. Es kann auch mit 5 Elementen listeninitialisiert werden. Ich glaube nicht, dass ein Standard-Bibliotheksimplementierer die Leute genug hasst, um dies tatsächlich zu tun, aber ich denke, es ist technisch konform.