Spec-Zone.ru › C++

std::ios_base::iostate

typedef /*implementation defined*/ iostate;
static constexpr iostate goodbit = 0;
static constexpr iostate badbit  = /* implementation defined */
static constexpr iostate failbit = /* implementation defined */
static constexpr iostate eofbit  = /* implementation defined */

Указывает флаги состояния потока. Это BitmaskType, определены следующие константы:

Константа Объяснение
goodbit без ошибок
badbit неисправимая ошибка потока
failbit операция ввода/вывода завершилась неудачно (ошибка форматирования или извлечения)
eofbit связанная последовательность ввода достигла конца файла

Флаг eofbit

Флаг eofbit устанавливается следующими стандартными функциями:

  • Функция ввода строки std::getline , если она завершается достижением конца потока, а не указанного символа завершения.
  • Перегрузки числового ввода basic_istream::operator>>, если при чтении следующего символа было обнаружено окончание потока на стадии 2 обработки num_get::get. В зависимости от состояния разбора, failbit может или не может быть установлено одновременно: например, int n; istringstream buf("1"); buf >> n; устанавливает eofbit, но не failbit: целое число 1 было успешно прочитано и сохранено в n. С другой стороны, bool b; istringstream buf("tr"); buf >> boolalpha >> b; устанавливает оба eofbit и failbit: недостаточно символов для завершения разбора булевого значения true.
  • Перегрузки извлечения символов operator>>std::basic_istream, если конец потока достигнут до ограничения (если таковое имеется) на количество извлекаемых символов.
  • Манипулятор ввода/вывода std::get_time и любые из функций разбора std::time_get: time_get::get, time_get::get_time, time_get::get_date и т.д., если конец потока достигнут до обработки последнего символа, необходимого для разбора ожидаемого значения даты/времени.
  • Манипулятор ввода/вывода std::get_money и функция money_get::get, если конец потока достигнут до обработки последнего символа, необходимого для разбора ожидаемого денежного значения.
  • Конструктор basic_istream::sentry, выполняемый в начале каждой функции форматированного ввода: если бит skipws сброшен (например, с помощью std::noskipws), sentry читает и отбрасывает ведущие пробельные символы. Если при этой операции достигается конец потока ввода, устанавливаются оба eofbit и failbit, и никакого ввода не происходит.
  • Манипулятор ввода/вывода std::ws, если он достигает конца потока при обработке пробелов (но, в отличие от стражи форматированного ввода, в этом случае не устанавливает failbit).
  • Функции неформатированного ввода basic_istream::read, basic_istream::get, basic_istream::peek, basic_istream::readsome, basic_istream::ignore и basic_istream::getline при достижении конца потока.
  • Функция отбрасывания ввода basic_istream::ignore, когда конец потока достигается до достижения указанного разделителя.
  • Немедленная функция ввода basic_istream::readsome, если basic_streambuf::in_avail возвращает -1.

Следующие функции очищают eofbit как побочный эффект:

  • basic_istream::putback
  • basic_istream::unget
  • basic_istream::seekg

Обратите внимание, что практически во всех ситуациях, если установлен eofbit, то установлен и failbit.

Флаг failbit

Флаг failbit устанавливается следующими стандартными функциями:

  • Конструктор basic_istream::sentry, выполняемый в начале каждой функции ввода, если бит eofbit или badbit уже установлен в потоке, или если при обработке ведущих пробелов встречается конец потока.
  • Конструктор basic_ostream::sentry, выполняемый в начале каждой функции вывода, в соответствии с реализацией.
  • operator>>(std::basic_string<>), если функция не извлекает ни одного символа из потока ввода.
  • operator>>(std::complex<>), если функция не может извлечь действительное комплексное число.
  • Перегрузки для массивов символов и одиночных символов operator>>, если они не могут извлечь ни одного символа.
  • Перегрузка для streambuf basic_istream::operator>>, если аргумент streambuf является нулевым указателем или если в streambuf не было вставлено ни одного символа.
  • Перегрузка для streambuf basic_ostream::operator<<, если функция не вставляет ни одного символа.
  • operator>>(std::bitset<>), если функция не извлекает ни одного символа из потока ввода.
  • std::getline , если функция не извлекает ни одного символа или ей удаётся извлечь basic_string::max_size символов из потока ввода.
  • Численный, указательный и булевы перегрузки basic_istream::operator>> (технически, перегрузки num_get::get, которые они вызывают), если вход не может быть проанализирован как действительное значение или если прочитанное значение не помещается в целевой тип.
  • Манипулятор времени ввода std::get_time (технически, time_get::get, который он вызывает), если вход не может быть однозначно проанализирован как значение времени в соответствии с заданной строкой формата.
  • Манипулятор денежного ввода std::get_money (технически, money_get::get, который он вызывает), если вход не может быть однозначно проанализирован как денежная величина в соответствии с правилами локали.
  • Операторы извлечения всех RandomNumberEngines, если обнаружен некорректный вход.
  • Операторы извлечения всех RandomNumberDistributions, если обнаружен некорректный вход.
  • Функции неформатированного ввода basic_istream::get, если они не могут извлечь ни одного символа.
  • basic_istream::getline, если он не извлекает ни одного символа, если он заполняет предоставленный буфер, не встретив разделитель, или если размер предоставленного буфера меньше 1.
  • basic_istream::read, если состояние конца файла возникает в потоке ввода до извлечения всех запрошенных символов.
  • basic_istream::seekg при ошибке
  • basic_ostream::tellp при ошибке
  • Конструкторы std::basic_fstream, std::basic_ifstream и std::basic_ofstream, принимающие имя файла в качестве аргумента, если файл не может быть открыт.
  • basic_fstream::open, basic_ifstream::open и basic_ofstream::open, если файл не может быть открыт.
  • basic_fstream::close, basic_ifstream::close и basic_ofstream::close, если файл не может быть закрыт.

Флаг badbit

Флаг badbit устанавливается следующими стандартными функциями:

  • basic_ostream::put если по какой-либо причине не удалось вставить символ в поток вывода.
  • basic_ostream::write если по какой-либо причине не удалось вставить символ в поток вывода.
  • Форматированные функции вывода operator<<, std::put_money, и std::put_time, если они встретили конец потока вывода до завершения вывода.
  • basic_ios::init при вызове для инициализации потока с указателем null для rdbuf().
  • basic_istream::putback и basic_istream::unget при вызове на потоке с указателем null rdbuf().
  • basic_ostream::operator<<(basic_streambuf*) при передаче нулевого указателя в качестве аргумента.
  • basic_istream::putback и basic_istream::unget, если rdbuf()->sputbackc() или rdbuf()->sungetc() возвращают traits::eof().
  • basic_istream::sync, basic_ostream::flush и любая функция вывода для потока вывода unitbuf, если rdbuf()->pubsync() возвращает -1.
  • Любая функция ввода-вывода потока, если исключение генерируется любым членом функции связанного буфера потока (например, sbumpc(), xsputn(), sgetc(), overflow(), и т.д.).
  • ios_base::iword и ios_base::pword при ошибке (например, при невозможности выделения памяти).

Пример

См. также

В следующей таблице показаны значения аксессоров basic_ios (good(), fail() и т.д.) для всех возможных комбинаций флагов ios_base::iostate:

Флаги ios_base::iostate Аксессоры basic_ios
eofbit failbit badbit good() fail() bad() eof() operator bool operator!
false false false true false false false true false
false false true false true true false false true
false true false false true false false false true
false true true false true true false false true
true false false false false false true true false
true false true false true true true false true
true true false false true false true false true
true true true false true true true false true
rdstate
возвращает флаги состояния
(публичный член-функция std::basic_ios<CharT,Traits>)
setstate
устанавливает флаги состояния
(публичный член-функция std::basic_ios<CharT,Traits>)
clear
изменяет флаги состояния
(публичный член-функция std::basic_ios<CharT,Traits>)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/ios_base/iostate

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API