Какова цель std:: byte?

Теперь, когда С++ 17 имеет std::byte, я искал способ конвертировать код, который считывает файлы в char в код, который читает файлы в byte. Файл содержит байты, а не целую цепочку.

Затем я прочитал этот вопрос и этот другой вопрос, где люди утверждали, что чтение файлов в byte неверно, и что чтение файлов в char является правильным.

Если byte не предназначен для доступа к памяти и по аналогии с файлами, то какова его цель? Как указано в двух других вопросах:

Подобно char и unsigned char, его можно использовать для доступа к необработанной памяти занятых другими объектами (представление объектов), но в отличие от этих типов, это не тип символа и не является арифметическим типом. байт - это только набор бит, и только побитовые логические операторы для него определены.

Это похоже на точный тип, который должен использоваться для чтения файлов, а не символов.

Ответы

Ответ 1

Возможно, вы ошибаетесь.

byte очень похож на "доступ к памяти". Вы должны использовать этот тип, если хранилище представляет собой всего лишь последовательность байтов, а не массив символов.

Типы Iostream не могут быть специализированы с byte, поскольку они разработаны вокруг символов в качестве их интерфейса. То есть, они не считают файлы в виде последовательностей байтов; они воспринимают их как последовательности персонажей. Теперь вы можете читать прямо в массив byte, используя листинг или два. Но это не так, как думает iostream.

Вам нужно сделать различие между тем, как работает iostream и как работают файлы. Iostream - это всего лишь одна файловая библиотека IO; это вряд ли является конечным, все файловые API-интерфейсы.

Большинство файловых API для чтения двоичных данных принимают void*, а не массивы символов. std::fread/fwrite и т.д.

То есть вы должны думать об этом, а не как о проблеме с std::byte, а как о проблеме с iostream. Еще один из них длинный.