public member function
<ios> <iostream>

std::basic_ios::clear

void clear (iostate state = goodbit);
设置错误状态标志
设置流的内部错误状态标志的新值。

当前标志值将被覆盖:所有位都将被 state 中的位替换;如果 stategoodbit(其值为零),则所有错误标志都将被清除。

如果调用此函数时流没有关联的流缓冲区,则会自动设置 badbit 标志(无论 state 参数传递的值如何)。

请注意,根据传递给成员 exceptions 的最新设置,更改 state 可能会抛出异常。

可以通过成员函数 rdstate 获取当前状态。

参数

state
类型为 ios_base::iostate 的对象,其值可以是以下状态标志成员常量的任意组合

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

返回值



示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// clearing errors
#include <iostream>     // std::cout
#include <fstream>      // std::fstream

int main () {
  char buffer [80];
  std::fstream myfile;

  myfile.open ("test.txt",std::fstream::in);

  myfile << "test";
  if (myfile.fail())
  {
    std::cout << "Error writing to test.txt\n";
    myfile.clear();
  }

  myfile.getline (buffer,80);
  std::cout << buffer << " successfully read from file.\n";

  return 0;
}

在此示例中,myfile 以输入模式打开,但我们对其执行了输出操作,因此设置了 failbit。然后调用 clear 来清除该标志,以便对 myfile 尝试执行其他操作,例如 getline

数据竞争

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

异常安全

基本保证:如果抛出异常,流处于有效状态。
如果结果的错误状态标志不是 goodbit 并且成员 exceptions 已设置为抛出该状态,则抛出成员类型为 failure 的异常。

另见