std::ios_base::iostate
来自cppreference.com
typedef /* 由实现定义 */ iostate; |
||
static constexpr iostate goodbit = 0; |
||
static constexpr iostate badbit = /* 由实现定义 */ static constexpr iostate failbit = /* 由实现定义 */ |
||
指定流状态标志。它是位掩码类型 (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::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),若输入不能按照本地环境规则无歧义地分析为货币值。
- 所有随机数引擎 (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> 的公开成员函数) |