В своем недавнем выступлении « Обработка типов в современном C ++» Тимур Думлер сказал, что std::bit_castего нельзя использовать для floatпреобразования битов в unsigned char[4]массив, потому что массивы в стиле C не могут быть возвращены из функции. Мы должны либо использовать, std::memcpyлибо подождать до C ++ 23 (или позже), когда что-то вроде reinterpret_cast<unsigned char*>(&f)[i]станет хорошо определенным.
В C ++ 20, мы можем использовать std::arrayс std::bit_cast,
float f = /* some value */;
auto bits = std::bit_cast<std::array<unsigned char, sizeof(float)>>(f);
вместо массива в стиле C, чтобы получить байты float?
struct X { unsigned char elems[5]; };удовлетворяет правило, которое вы цитируете. Конечно, он может быть инициализирован до 4 элементов. Это может также быть инициализировано списком с 5 элементами. Я не думаю, что какой-либо разработчик стандартной библиотеки ненавидит людей настолько, чтобы это делать, но я думаю, что это технически соответствует.