public member function
<ios> <iostream>

std::basic_ios::good

bool good() const;
检查流的状态是否良好
当流的错误状态标志eofbitfailbitbadbit)均未设置时,返回 true

此函数行为如同定义为
1
2
3
bool basic_ios::good() const {
  return rdstate() == goodbit;
}

请注意,此函数并非成员函数bad的精确反义,bad仅检查badbit标志是否设置。

可以通过成员函数eoffailbad 来检查特定的错误标志是否已设置。

iostate
(成员常量)
表示检查状态标志的函数
good()eof()fail()bad()rdstate()
goodbit无错误(值为零 iostatetruefalsefalsefalsegoodbit
eofbit到达文件尾falsetruefalsefalseeofbit
failbitI/O 操作的逻辑错误falsefalsetruefalsefailbit
badbitI/O 操作的读/写错误falsefalsetruetruebadbit
eofbitfailbitbadbit 是具有实现定义值的成员常量,可以进行组合(就像使用按位 OR 运算符一样)。
goodbit 为零,表示其他位均未设置。

参数



返回值

当流的任何状态标志均未设置时为 true
当流的任何状态标志已设置(badbiteofbitfailbit)时为 false

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// error state flags
#include <iostream>     // std::cout, std::ios
#include <sstream>      // std::stringstream

void print_state (const std::ios& stream) {
  std::cout << " good()=" << stream.good();
  std::cout << " eof()=" << stream.eof();
  std::cout << " fail()=" << stream.fail();
  std::cout << " bad()=" << stream.bad();
}

int main () {
  std::stringstream stream;

  stream.clear (stream.goodbit);
  std::cout << "goodbit:"; print_state(stream); std::cout << '\n';

  stream.clear (stream.eofbit);
  std::cout << " eofbit:"; print_state(stream); std::cout << '\n';

  stream.clear (stream.failbit);
  std::cout << "failbit:"; print_state(stream); std::cout << '\n';

  stream.clear (stream.badbit);
  std::cout << " badbit:"; print_state(stream); std::cout << '\n';

  return 0;
}

输出
goodbit: good()=1 eof()=0 fail()=0 bad()=0
 eofbit: good()=0 eof()=1 fail()=0 bad()=0
failbit: good()=0 eof()=0 fail()=1 bad()=0
 badbit: good()=1 eof()=0 fail()=1 bad()=1


数据竞争

访问流对象。
并发访问同一个流对象可能导致数据争用。

异常安全

强保证: 如果抛出异常,流不会发生任何改变。

另见