Trong cuộc nói chuyện gần đây của anh ấy, kiểu lén lút trong C ++ hiện đại Timur Doumler nói rằng std::bit_castkhông thể sử dụng bit để floatchuyển thành một unsigned char[4]vì các mảng kiểu C không thể được trả về từ một hàm. Chúng ta nên sử dụng std::memcpyhoặc đợi cho đến C ++ 23 (hoặc mới hơn) khi một cái gì đó giống như reinterpret_cast<unsigned char*>(&f)[i]sẽ được xác định rõ.
Trong C ++ 20, chúng ta có thể sử dụng std::arrayvới std::bit_cast,
float f = /* some value */;
auto bits = std::bit_cast<std::array<unsigned char, sizeof(float)>>(f);
thay vì mảng kiểu C để lấy byte của a float?
struct X { unsigned char elems[5]; };đáp ứng quy tắc bạn trích dẫn. Nó chắc chắn có thể được khởi tạo danh sách với tối đa 4 yếu tố. Nó cũng có thể được khởi tạo danh sách với 5 yếu tố. Tôi không nghĩ rằng bất kỳ người triển khai thư viện tiêu chuẩn nào cũng ghét mọi người thực sự làm điều này, nhưng tôi nghĩ rằng nó phù hợp về mặt kỹ thuật.