std::ios_base::iostate
来自 cppreference.cn
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 由以下标准库函数设置
- 字符串输入函数 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 如果函数没有提取任何字符,或者如果它在没有遇到分隔符的情况下填充了提供的缓冲区,或者如果提供的缓冲区大小小于 1。
- 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> 的公共成员函数) |