std::ios_base::iostate
来自 cppreference.cn
typedef /*实现定义*/ iostate; |
||
static constexpr iostate goodbit = 0; |
||
static constexpr iostate badbit = /* 实现定义 */ static constexpr iostate failbit = /* 实现定义 */ |
||
指定流状态标志。它是一个 BitmaskType,定义了以下常量
常量 | 解释 |
goodbit | 无错误 |
badbit | 不可恢复的流错误 |
failbit | 输入/输出操作失败(格式化或提取错误) |
eofbit | 关联的输入序列已到达文件末尾 |
目录 |
[编辑] eofbit
eofbit 由以下标准库函数设置
- 字符串输入函数 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::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。 - 每个流 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> 的公共成员函数) |