Dalam ceramahnya yang baru-baru ini "Tipe punning in C ++ modern" Timur Doumler mengatakan bahwa std::bit_cast
tidak dapat digunakan untuk menggigit sebuah float
ke dalam unsigned char[4]
karena array gaya-C tidak dapat dikembalikan dari suatu fungsi. Kita harus menggunakan std::memcpy
atau menunggu sampai C ++ 23 (atau lebih baru) ketika sesuatu seperti reinterpret_cast<unsigned char*>(&f)[i]
akan menjadi terdefinisi dengan baik.
Di C ++ 20, bisakah kita menggunakan std::array
with std::bit_cast
,
float f = /* some value */;
auto bits = std::bit_cast<std::array<unsigned char, sizeof(float)>>(f);
bukannya array C-style untuk mendapatkan byte dari float
?
struct X { unsigned char elems[5]; };
memenuhi aturan yang Anda kutip. Ini tentu saja dapat diinisialisasi daftar hingga 4 elemen. Ini juga dapat diinisialisasi daftar dengan 5 elemen. Saya tidak berpikir ada pelaksana perpustakaan standar yang cukup membenci orang untuk benar-benar melakukan ini, tapi saya pikir itu sesuai secara teknis.