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 */
|
||
指定流状态标志。它是一个 位掩码类型 ,定义了以下常量:
| 常量 | 说明 |
| goodbit | 无错误 |
| badbit | 不可恢复的流错误 |
| failbit | 输入/输出操作失败(格式化或提取错误) |
| eofbit | 关联输入序列已到达文件末尾 |
目录 |
eofbit
eofbit 被以下标准库函数设置:
- 字符串输入函数 std::getline ,当因到达流末尾(而非到达指定终止字符)而完成读取时。
-
basic_istream::operator>>
的数值输入重载,在
num_get::get
处理的第二阶段期间读取下一个字符时遇到流末尾。根据解析状态,
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 也会同时被设置。
The 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 s 的提取运算符,若遇到错误输入。
- 所有 RandomNumberDistribution s 的提取运算符,若遇到错误输入。
- 无格式输入函数 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 在失败时(例如内存分配失败)。
示例
|
本节内容不完整
原因:缺少示例 |
参见
下表展示了所有可能的 ios_base::iostate 标志组合对应的 basic_ios 访问器( good() 、 fail() 等)取值:
| 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>
的公开成员函数)
|