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 :
- 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::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> 的公开成员函数) |