CppDS.com

C++ 98 11 14 17 20 手册

std::ios_base::iostate

来自cppreference.com
< cpp‎ | io‎ | ios base
typedef /*implementation defined*/ iostate;
static constexpr iostate goodbit = 0;
static constexpr iostate badbit = /*implementation defined*/

static constexpr iostate failbit = /*implementation defined*/

static constexpr iostate eofbit = /*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; 一同设置 eofbitfailbit :无足够的字符完成布尔 true 的分析。
  • operator>>std::basic_istream 的字符释出重载,若在释出字符数量上的限制(若存在)前抵达流结尾。
  • std::get_time I/O 操纵符和任何 std::time_get 分析函数: time_get::gettime_get::get_timetime_get::get_date 等,若在分析期待的被处理日期/时间值所需的最末字符前抵达流结尾。
  • std::get_money I/O 操纵符和 money_get::get 函数,若在分析期待的被处理货币值所需的最末字符前抵达流结尾。
  • basic_istream::sentry 构造函数,在每个有格式输入函数的起始执行:除非未设置 skipws (例如通过发布 std::noskipws ),否则 sentry 会读取并舍弃前导空白字符。若在此操作中抵达流结尾,则一同设置 eofbitfailbit ,并且不发生输入。
  • I/O 操纵符 std::ws ,若它在消耗空白符时抵达流结尾(但不同于有格式输入 sentry ,此情况下它不设置 failbit
  • 无格式输入函数 basic_istream::readbasic_istream::getbasic_istream::peekbasic_istream::getline 在抵达流尾时。
  • 舍弃输入函数 basic_istream::ignore ,在抵达指定的分隔字符前抵达流结尾时。
  • 立即输入函数 basic_istream::readsome ,若 basic_streambuf::in_avail 返回 -1

下列函数作为副效应清除 eofbit

注意在几乎所有情况下,若设置 eofbit ,则一同设置 failbit 。

failbit

下列标准库函数设置 failbit :

badbit

下列标准库函数设置 badbit :

rdbuf()->sputbackc()rdbuf()->sungetc() 返回 traits::eof()

  • basic_istream::syncbasic_ostream::flushunitbuf 输出流上的每个输出函数,若 rdbuf()->pubsync() 返回 -1
  • 每个流 I/O 函数,若任何关联流缓冲的成员函数(如 sbumpc() 、 xsputn() 、 sgetc() 、 overflow() 等)抛出异常。
  • ios_base::iwordios_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> 的公开成员函数)
关闭