public member function
<ios> <iostream>

std::ios::good

bool good() const;
檢查流的狀態是否良好
如果流的任何錯誤狀態標誌eofbitfailbitbadbit)未被設定,則返回 true

此函式行為如同定義為
1
2
3
bool 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()=0 eof()=0 fail()=1 bad()=1


資料競爭

訪問流物件。
併發訪問同一個流物件可能導致資料爭用。

異常安全

強保證: 如果丟擲異常,流不會發生任何改變。

另見