c++標準庫流狀態一覽

1. 流狀態說明

c++標準庫對於流定義了一套它本身的狀態變化規則,在ios_base.h聲明的ios_base類中,它定義了一個枚舉類型_Ios_Iostate來表示流狀態,主要有如下四種:ios

狀態 說明
badbit 在輸入輸出時遇到了系統級錯誤,會置爲badbit
eofbit 讀取文件時讀到了文件末尾,就會置爲eofbit
failbit 往流緩衝區寫入或者讀取數據發生錯誤時,會被置爲failbit
goodbit 上面三種都沒有時,就是goodbit

另外ios_base另外定義了一個保護成員iostate _M_streambuf_state;來表示當前流的狀態。c++

2. 流狀態操做函數

對於流狀態操做函數,是定義在類basic_ios類中,它是ios_base的派生類,位於頭文件basic_ios.h中,這裏不討論basic_ios類的使用,只說明它裏面定義的狀態操做函數.函數

說明:枚舉類型_Ios_Iostate取了個別名,叫iostate。

函數原型以下:this

//返回當前流狀態  
iostate
  rdstate() const
  { return _M_streambuf_state; }

//默認清除全部異常狀態,置爲goodbit
  void
  clear(iostate __state = goodbit);

//在當前流狀態基礎上根據傳入狀態進行追加
  void
  setstate(iostate __state)
  { this->clear(this->rdstate() | __state); }

//若是當前狀態是goodbit,那麼返回true,不然返回false
  bool
  good() const
  { return this->rdstate() == 0; }

//若是當前流狀態是eofbit,那麼返回true,不然返回false
  bool
  eof() const
  { return (this->rdstate() & eofbit) != 0; }

//若是當前流狀態是failbit,那麼返回true,不然返回false
  bool
  fail() const
  { return (this->rdstate() & (badbit | failbit)) != 0; }

//若是當前流狀態是badbit,那麼返回true,不然返回false
  bool
  bad() const
  { return (this->rdstate() & badbit) != 0; }

因此若是咱們想主動的設置流狀態,能夠使用setstate函數,想清除全部異常狀態,能夠使用clear函數,想判斷當前流狀態是否正常,就使用good函數。spa

下面用一張圖來總結一下流狀態在這兩個類裏面的關聯:code

相關文章
相關標籤/搜索