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_cast
không thể sử dụng bit để float
chuyể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::memcpy
hoặ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::array
vớ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.