In seinem kürzlich gehaltenen Vortrag "Type punning in modernem C ++" sagte Timur Doumler , dass std::bit_cast
dies nicht zum Bit-Casting float
in 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::memcpy
C ++ 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::array
mit 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.