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:
Обратите внимание, что почти во всех случаях при установленном 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 |
| возвращает флаги состояния (функция-член открытого доступа std::basic_ios<CharT,Traits>) |
|
| устанавливает флаги состояния (функция-член открытого доступа std::basic_ios<CharT,Traits>) |
|
| изменяет флаги состояния (функция-член открытого доступа 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