public member function
<ios> <iostream>

std::basic_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
19
// basic_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();
  }
  catch (std::ifstream::failure e) {
    std::cerr << "Exception opening/reading file";
  }

  file.close();

  return 0;
}

数据竞争

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

异常安全

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

另见