Dalam ceramahnya yang baru-baru ini "Tipe punning in C ++ modern" Timur Doumler mengatakan bahwa std::bit_casttidak dapat digunakan untuk menggigit sebuah floatke dalam unsigned char[4]karena array gaya-C tidak dapat dikembalikan dari suatu fungsi. Kita harus menggunakan std::memcpyatau 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::arraywith 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.