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 */

Задает флаги состояния потока. Это тип битовой маски; определены следующие константы:

Константа Описание
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, если он достигает конца потока при поглощении пробельных символов (однако, в отличие от sentry форматированного ввода, в этом случае он не устанавливает 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>> для массива символов и отдельного символа, если им не удается извлечь ни одного символа.
  • Перегрузка basic_istream::operator>> для streambuf, если аргумент streambuf является нулевым указателем или если в streambuf не было вставлено ни одного символа.
  • Перегрузка basic_ostream::operator<< для streambuf, если функция не вставляет ни одного символа.
  • 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 при вызове для инициализации потока с нулевым указателем вместо rdbuf().
  • basic_istream::putback и basic_istream::unget при вызове для потока с нулевым 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/cpp/io/ios_base/iostate

Spec-Zone.ru

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