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*/ |
Specifies stream state flags. It is a BitmaskType, the following constants are defined:
| Constant | Explanation |
|---|---|
goodbit | no error |
badbit | irrecoverable stream error |
failbit | input/output operation failed (formatting or extraction error) |
eofbit | associated input sequence has reached end-of-file |
The eofbit
The eofbit is set by the following standard library functions:
- The string input function
std::getlineif it completes by reaching the end of the stream, as opposed to reaching the specified terminating character. - The numeric input overloads of
basic_istream::operator>>if the end of the stream was encountered while reading the next character, on Stage 2 ofnum_get::getprocessing. Depending on the parsing state,failbitmay or may not be set at the same time: for example,int n; istringstream buf("1"); buf >> n;setseofbit, but notfailbit: the integer1was successfully parsed and stored inn. On the other hand,bool b; istringstream buf("tr"); buf >> boolalpha >> b;sets botheofbitandfailbit: there was not enough characters to complete the parsing of the booleantrue. - The character extraction overloads of
operator>>std::basic_istream, if the end of the stream is reached before the limit (if any) on the number of characters to be extracted. - The
std::get_timeI/O manipulator and any of thestd::time_getparsing functions:time_get::get,time_get::get_time,time_get::get_date, etc., if the end of the stream is reached before the last character needed to parse the expected date/time value was processed. - The
std::get_moneyI/O manipulator andmoney_get::getfunction, if the end of the stream is reached before the last character needed to parse the expected monetary value was processed. - The
basic_istream::sentryconstructor, executed at the beginning of every formatted input function: unless theskipwsbit is unset (e.g. by issuingstd::noskipws), sentry reads and discards the leading whitespace characters. If the end of the input stream is reached during this operation, botheofbitandfailbitare set, and no input takes place. - The I/O manipulator
std::ws, if it reaches the end of the stream while consuming whitespace (but, unlike the formatted input sentry, it does not setfailbitin this case) - The unformatted input functions
basic_istream::read,basic_istream::get,basic_istream::peek, andbasic_istream::getline, when reaching the end of the stream. - The discard input function
basic_istream::ignore, when reaching the end of the stream before reaching the specified delimiter character. - The immediate input function
basic_istream::readsome, ifbasic_streambuf::in_availreturns-1
The following functions clear eofbit as a side-effect:
Note that in nearly all situations, if eofbit is set, the failbit is set as well.
The failbit
The failbit is set by the following standard library functions:
- The
basic_istream::sentryconstructor, executed at the beginning of every input function, if eithereofbitorbadbitis already set on the stream, or if the end of stream is encountered while consuming leading whitespace. - The
basic_ostream::sentryconstructor, executed at the beginning of every output function, under implementation-defined conditions. -
operator>>(std::basic_string<>)if the function extracts no characters from the input stream. -
operator>>(std::complex<>)if the function fails to extract a valid complex number. - The character array and single character overloads of
operator>>if they fail to extract any characters. - The streambuf overload of
basic_istream::operator>>if the streambuf argument is a null pointer or if no characters were inserted into the streambuf. - The streambuf overload of
basic_ostream::operator<<if the function inserts no characters. -
operator>>(std::bitset<>)if the function extracts no characters from the input stream. -
std::getlineif the function extracts no characters or if it manages to extractbasic_string::max_sizecharacters from the input stream. - The numeric, pointer, and boolean input overloads of
basic_istream::operator>>(technically, the overloads ofnum_get::getthey call), if the input cannot be parsed as a valid value or if the value parsed does not fit in the destination type. - The time input manipulator
std::get_time(technically,time_get::getit calls), if the input cannot be unambiguously parsed as a time value according to the given format string. - The currency input manipulator
std::get_money(technically,money_get::getit calls), if the input cannot be unambiguously parsed as a monetary value according to the locale rules. - The extraction operators of all RandomNumberEngines, if bad input is encountered.
- The extraction operators of all RandomNumberDistributions, if bad input is encountered.
- The unformatted input functions
basic_istream::getif they fails to extract any characters. -
basic_istream::getline, if it extracts no characters, if it fills in the provided buffer without encountering the delimiter, or if the provided buffer size is less than 1. -
basic_istream::read, if the end-of-file condition occurs on the input stream before all requested characters could be extracted. -
basic_istream::seekgon failure -
basic_ostream::tellpon failure - The constructors of
std::basic_fstream,std::basic_ifstream, andstd::basic_ofstreamthat takes a filename argument, if the file cannot be opened. -
basic_fstream::open,basic_ifstream::open, andbasic_ofstream::openif the file cannot be opened. -
basic_fstream::close,basic_ifstream::close, andbasic_ofstream::closeif the file cannot be closed.
The badbit
The badbit is set by the following standard library functions:
-
basic_ostream::putif it fails to insert a character into the output stream, for any reason. -
basic_ostream::writeif it fails to insert a character into the output stream, for any reason. - Formatted output functions operator<<,
std::put_money, andstd::put_time, if they encounter the end of the output stream before completing output. -
basic_ios::initwhen called to initialize a stream with a null pointer forrdbuf() -
basic_istream::putbackandbasic_istream::ungetwhen called on a stream with a nullrdbuf() -
basic_ostream::operator<<(basic_streambuf*)when a null pointer is passed as the argument. -
basic_istream::putbackandbasic_istream::ungetif
rdbuf()->sputbackc() or rdbuf()->sungetc() return traits::eof().
-
basic_istream::sync,basic_ostream::flush, and every output function on aunitbufoutput stream, ifrdbuf()->pubsync()returns-1 - Every stream I/O function if an exception is thrown by any member function of the associated stream buffer (e.g. sbumpc(), xsputn(), sgetc(), overflow(), etc)
-
ios_base::iwordandios_base::pwordon failure (e.g. failure to allocate memory)
Example
See also
The following table shows the value of basic_ios accessors (good(), fail(), etc.) for all possible combinations of ios_base::iostate flags:
ios_base::iostate flags | basic_ios accessors |
|||||||
| 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 |
| returns state flags (public member function of std::basic_ios<CharT,Traits>) |
|
| sets state flags (public member function of std::basic_ios<CharT,Traits>) |
|
| modifies state flags (public member function of std::basic_ios<CharT,Traits>) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
http://en.cppreference.com/w/cpp/io/ios_base/iostate