public member function
<ios> <iostream>

std::ios::exceptions

get (1)
iostate exceptions() const;
set (2)
void exceptions (iostate except);
获取/设置异常掩码
第一种形式(1)返回流的当前异常掩码

第二种形式(2)为流设置新的异常掩码并清除流的错误状态标志(如同调用了成员函数clear())。

异常掩码是所有流对象内部保存的一个值,它指定在设置了哪些状态标志时会抛出一个成员类型为failure(或其派生类型)的异常。该掩码是成员类型iostate的一个对象,它是由以下成员常量的任意组合构成的:

iostate
(成员常量)
表示检查状态标志的函数
good()eof()fail()bad()rdstate()
goodbit无错误(值为零 iostatetruefalsefalsefalsegoodbit
eofbit到达文件尾falsetruefalsefalseeofbit
failbitI/O 操作的逻辑错误falsefalsetruefalsefailbit
badbitI/O 操作的读/写错误falsefalsetruetruebadbit
eofbitfailbitbadbit是具有实现定义值的成员常量,它们可以(如同使用按位或运算符一样)组合,以便在设置了任何选定的错误状态标志时,流会抛出异常。
goodbit为零,表示在设置错误状态标志时不会抛出异常。

所有流默认都具有goodbit(它们不会因为设置了错误状态标志而抛出异常)。

参数

except
一个iostate类型的成员位掩码值,由一组要设置的错误状态标志(badbiteofbit和/或failbit)构成,或者设置为goodbit(或零)。

返回值

第一种形式(1)返回一个iostate类型的位掩码,表示调用此成员函数之前的现有异常掩码。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// ios::exceptions
#include <iostream>     // std::cerr
#include <fstream>      // std::ifstream

int main () {
  std::ifstream file;
  file.exceptions ( std::ifstream::failbit | std::ifstream::badbit );
  try {
    file.open ("test.txt");
    while (!file.eof()) file.get();
    file.close();
  }
  catch (std::ifstream::failure e) {
    std::cerr << "Exception opening/reading/closing file\n";
  }

  return 0;
}

数据竞争

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

异常安全

基本保证:如果抛出异常,流处于有效状态。

另见