type c++ byte c++17

c++ - type - ¿Cuál es el propósito de std:: byte?



byte c++ (1)

Quizás estás malinterpretando cosas.

byte está muy destinado a "acceder a la memoria". Está previsto que utilice el tipo cuando el almacenamiento es solo una secuencia de bytes en lugar de una matriz de caracteres.

Los tipos de Iostream no pueden especializarse con byte , ya que están diseñados alrededor de los caracteres como su interfaz. Es decir, no piensan en los archivos como secuencias de bytes; Los ven como secuencias de personajes. Ahora, sin duda puede leer directamente en una matriz de byte utilizando uno o dos cast. Pero esa no es la forma en que iostream piensa de forma nativa.

Debe hacer una distinción entre la forma en que funciona iostream y la forma en que funcionan los archivos . Iostream es solo una biblioteca IO de un archivo, después de todo; Apenas es el final de todo, la totalidad de las API de archivos.

La mayoría de las API de archivos para leer datos binarios se void* lugar de matrices de caracteres. std::fread/fwrite , y así sucesivamente.

Es decir, debe pensar en esto, no como un problema con std::byte , sino como un problema con iostream . Solo otro en una larga fila de ellos.

Ahora que c ++ 17 tiene std::byte , estaba buscando una manera de convertir el código que lee los archivos a char en el código que lee los archivos en byte . Un archivo contiene bytes, no un grupo de enteros.

Luego leí esta pregunta y esta otra pregunta donde la gente argumentaba que leer los archivos en un byte es incorrecto, y que leer los archivos en un char es correcto.

Si el byte no está diseñado para acceder a la memoria y, por analogía, a los archivos, ¿cuál es su propósito? Como se cita en las otras dos preguntas:

Al igual que char y unsigned char, se puede usar para acceder a la memoria en bruto ocupada por otros objetos (representación de objeto), pero a diferencia de esos tipos, no es un tipo de carácter y no es un tipo aritmético. Un byte es solo una colección de bits, y solo los operadores lógicos bitwise están definidos para él.

Esto suena como el tipo exacto que debe usarse para leer archivos, no caracteres.