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
- 字符串输入函数 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 参数为 null 指针或没有字符插入到 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,如果文件无法关闭。
[edit] 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 失败时(例如,分配内存失败)。
[edit] 示例
本节内容不完整 原因:没有示例 |
[edit] 另请参见
下表显示了 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> 的公共成员函数) |