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 как побочный эффект:
Обратите внимание, что практически во всех ситуациях, если установлен 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при вызове на потоке с указателем nullrdbuf(). -
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/w/cpp/io/ios_base/iostate