std::ios_base::iostate
来自cppreference.com
                    
                                        
                    
                    
                                                            
                    |   typedef /*implementation defined*/ iostate;  | 
||
|   static constexpr iostate goodbit = 0;  | 
||
|   static constexpr iostate badbit = /*implementation defined*/ static constexpr iostate failbit = /*implementation defined*/  | 
||
指定流状态标志。它是位掩码类型 (BitmaskType) ,定义下列常量:
| 常量 | 解释 | 
| goodbit | 无错误 | 
| badbit | 不可恢复的流错误 | 
| failbit | 输入/输出操作失败(格式化或提取错误) | 
| eofbit | 关联的输出序列已抵达文件尾 | 
eofbit
下列标准库函数设置 eofbit :
- string 输入函数 std::getline ,若它以抵达流结尾,而非抵达指定的终止字符完成。
 -  basic_istream::operator>> 的数值输入重载,若在 num_get::get 处理的阶段 2 ,读取下个字符时遇到流结尾。取决于分析状态,可能或可能不同时设置 
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 I/O 操纵符和任何 std::time_get 分析函数: time_get::get 、 time_get::get_time 、 time_get::get_date 等,若在分析期待的被处理日期/时间值所需的最末字符前抵达流结尾。
 - std::get_money I/O 操纵符和 money_get::get 函数,若在分析期待的被处理货币值所需的最末字符前抵达流结尾。
 -  basic_istream::sentry 构造函数,在每个有格式输入函数的起始执行:除非未设置 
skipws(例如通过发布 std::noskipws ),否则 sentry 会读取并舍弃前导空白字符。若在此操作中抵达流结尾,则一同设置eofbit和failbit,并且不发生输入。 -  I/O 操纵符 std::ws ,若它在消耗空白符时抵达流结尾(但不同于有格式输入 sentry ,此情况下它不设置 
failbit) - 无格式输入函数 basic_istream::read 、 basic_istream::get 、 basic_istream::peek 和 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 ),若输入不能按照本地环境规则无歧义地分析为货币值。
 - 所有随机数引擎 (RandomNumberEngine) 的释出函数,若遇到错误输入。
 - 所有随机数分布 (RandomNumberDistribution) 的释出函数,若遇到错误输入。
 - 无格式输入函数 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 。 - 每个流 I/O 函数,若任何关联流缓冲的成员函数(如 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> 的公开成员函数)  |