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)流物件。
併發訪問同一個流物件可能導致資料爭用。

異常安全

基本保證:如果丟擲異常,流處於有效狀態。

另見