type sirve que para long data bool and c++ file types integer unsigned-long-long-int

sirve - long long c++ range



¿Está std:: streampos garantizado como sin firmar por mucho tiempo? (2)

¿Está std::streampos garantizado como unsigned long long ?

Si no es así, ¿cómo funciona std::istream::seekg correctamente en archivos mayores que 4G?


De http://en.cppreference.com/w/cpp/io/fpos :

std::streampos es una especialización de la plantilla de clase

template< class State > class fpos;

std::streampos es typedef''ed para ser std::fpos<std::char_traits<char>::state_type>

Cada objeto de tipo fpos mantiene la posición de bytes en la secuencia (generalmente como un miembro privado del tipo std::streamoff ).

De http://en.cppreference.com/w/cpp/io/streamoff :

El tipo std::streamoff es un tipo integral firmado de tamaño suficiente para representar el tamaño máximo de archivo posible admitido por el sistema operativo. Por lo general, este es un tipo de long long .

Para responder tu pregunta...

Pregunta ¿ std::streampos garantiza que std::streampos estará unsigned long long ?

Respuesta Estoy seguro de que quería saber si el tipo integral subyacente que ocupa la posición está garantizado como unsigned long long . En ese sentido, la verdadera pregunta es si std::streamoff está garantizado como unsigned long long . La respuesta a esa pregunta es "No", como puede inferir de las descripciones anteriores.

Pregunta Si no es así, ¿cómo funciona std::istream::seekg correctamente en archivos de mayor tamaño que 4G?

Respuesta Si un sistema operativo admite trabajar con archivos de más de 4G, std::streamoff se tipifica como corresponde. Incluso entonces, es probable que sea un tipo integral firmado. Aquí hay otra cita de http://en.cppreference.com/w/cpp/io/streamoff .

Un valor de std :: streamoff de -1 también se usa para representar condiciones de error en algunas de las funciones de la biblioteca de E / S.


No, no está garantizado que unsigned long long esté unsigned long long .

Especialmente con compiladores más antiguos, puede no funcionar con archivos de más de 4 GB (y en algunos casos fue firmado, por lo que solo funcionaba con archivos de hasta 2 GB, pero cuando los discos duros típicos eran de 20 a 40 megabytes, probablemente no parecía una consideración importante).