Гарантируется ли std :: streampos без знака long long?

Является std::streampos гарантированно будет unsigned long long?

Если нет, то как std::istream::seekg правильно работать с файлами больше 4G?

4

Решение

От http://en.cppreference.com/w/cpp/io/fpos:

std::streampos это специализация шаблона класса

template< class State > class fpos;

std::streampos Тип определен, чтобы быть std::fpos<std::char_traits<char>::state_type>

Каждый объект типа fpos содержит байтовую позицию в потоке (обычно как закрытый член типа std::streamoff).

От http://en.cppreference.com/w/cpp/io/streamoff:

Тип std::streamoff является целочисленным типом со знаком достаточного размера для представления максимально возможного размера файла, поддерживаемого операционной системой. Как правило, это typedef для long long,

Чтобы ответить на ваши вопросы …

Вопрос Является std::streampos гарантированно будет unsigned long long?

Ответ Я уверен, что вы имели в виду выяснить, гарантированно ли базовый целочисленный тип, содержащий позицию unsigned long long, В этом смысле реальный вопрос заключается в том, std::streamoff гарантированно будет unsigned long long, Ответ на этот вопрос «Нет», как вы можете сделать из приведенного выше описания.

Вопрос Если нет, то как std::istream::seekg правильно работать с файлами больше 4G?

Ответ Если операционная система поддерживает работу с файлами размером более 4G, это std::streamoff соответственно напечатано. Даже тогда, скорее всего, это будет целочисленный тип со знаком. Вот еще одна цитата из http://en.cppreference.com/w/cpp/io/streamoff.

Значение std :: streamoff -1 также используется для представления условий ошибки некоторыми функциями библиотеки ввода-вывода.

8

Другие решения

Нет, это не гарантировано unsigned long long,

Особенно со старыми компиляторами, он может не работать с файлами размером более 4 ГБ (и в некоторых случаях он был подписан, поэтому он работал только с файлами до 2 ГБ — но когда типичные жесткие диски были от 20 до 40 мегабайт, это, вероятно, не казалось серьезным соображением).

4

По вопросам рекламы [email protected]