1 簡介
咱們都知道,平時經常使用的那些標準流,諸如iostream、ofstream、ifstream等等,其實都是對應的basic_XXX模版的實例類。 而這些basic_XXX類模版又都是繼承自同一個基類模版----basic_ios
。ios
2 basic_ios模版
定義這個基類模版應該是出於可重用的目的。數組
2.1 成員類型
- char_type : 字符類型,即第一個模版參數。
- char_traits : 萃取器,即第二個模版參數(默認爲位於< string >頭文件內的char_traits萃取器)。
2.2 構造器
該模版的構造函數只須要兩個類型:charT、traits。 一個是字符類型,另外一個是字符萃取器,二者都只和字符有關。ide
2.3 狀態標記函數
- good : 檢測流狀態是否爲good。
- eof : 檢測end-of-file 標記位是否被置爲1,即是否到文件末尾。
- fail : 檢測 fail標記位 或者 bad標記位是否被置爲1,即先前是否有操做失敗。
- bad : 檢測bad 標記位是否被置爲1, 即先前是否有操做致使了嚴重錯誤(導致流的完整性遭到破壞)。
- operator !、operator bool : 檢測流的狀態是否正常,便是否有操做失敗或致使了嚴重錯誤(fail or bad)。
- rdstate、setstate : 返回或者設置全部狀態標記位。
- clear : 清楚狀態標記位。
2.4 格式化函數
- coptfmt : 將給定的basic_ios對象的內部格式copy給自身。
- fill : 返回、設置填充字符(當設定的寬度大於實際輸出寬度時,纔會出現填充狀況)。
2.5 其餘函數
- exceptions : 返回、設置異常掩碼(設置以後,對應的狀態標記位被置1時,會拋出異常)。
- imbue : 將locale灌輸進流,這個調用會觸發imbue_event事件。
- tie : 返回先前的關聯輸出流、設置新的關聯輸出流。"The tied stream is an output stream object which is flushed before each i/o operation in this stream object." 也就是說,每次自身的輸入輸出操做發生前,該tied的流都回把緩衝區的內容輸出。 默認狀況下,標準cin和cerr流與cout相關連,因此每次在鍵盤輸入時,「黑框」都回把輸入顯示出來。
- rdbuf : 返回、設置basic_ios內部的stream buffer。
- narrow : 將傳入字符(一般是寬字符)窄化(narrow)成自身模版類的char_type類型字符。
- widen : 將傳入字符寬化(widen)成自身模版類的char_type類型字符(一般是寬字符)。
3 ios_base類
這個類很特殊,它是basic_ios類模版的基類,而且它的構造函數是私有的。 這就意味着它在設計之初就是內部使用,只用於派生,不能被用戶聲明使用。函數
3.1 格式化函數
- flags : 返回或者從新設置全部格式標記符。
- setf : 設置特定類別的格式標記符。
- unsetf : 清除特定的格式標記符。
- precision : 設置浮點數精度。
- width : 設置域寬。
3.2 本地化函數
- imbue : 「灌入」區域設置。
- getloc : 返回當前區域設置。
3.3 有關internal array的函數
該類內部維護了一個internal extensible array做爲通用數組,而且定義了三個公有函數幫助用戶使用它們。this
- xalloc(靜態) : 返回一個extensible array的新下標。
- iword : 返回數組中對應給定下標的long元素。
- pword : 返回數組中給定下標對應的元素指針(void*)。
3.4 事件支持
ios_base支持事件這一律念,但只支持有限的事件。spa
3.4.1 event枚舉類
- copyfmt_event : 當調用copyfmt時發生。
- erase_event : 當stream的析構器被調用時。
- imbue_event : 當調用ios_base::imbue時。
3.4.2 event_callback類型
ios_base以回調函數的形式來支持事件。 回調函數必須知足如下類型void (*event_callback) (event en, ios_base& obj, int index);
其中obj
是觸發事件的stream對象,index
是註冊回調函數時的傳入的index參數。設計
3.4.3 註冊事件回調函數
3.5 其餘
3.5.1 其餘函數
- sync_with_stdio(靜態) : 是否同步C++輸入輸出流和C輸入輸出對象(stdin、stdout、stderr)。
3.5.2 其餘成員類型
- fmtflags : 流格式化標記符類型。
- iostate : 流狀態標記符類型。
- openmode : 流打開模式標記符類型。
- seekdir : 流定位方向標記符類型。
3.5.3 其餘成員類
- failure : 繼承自std::exception的異常類,用來做爲輸入輸出流的基本異常類。
- Init : 八個標準流實例化的控制器。
4 Error Reporting
該頭文件也提供了必定的錯誤處理功能。指針
4.1 io_errc 枚舉類
這個枚舉類定義了input/output 的錯誤狀況。 C++標準只要求該枚舉類定義stream
枚舉,但具體的庫能夠本身實現額外的枚舉。code
4.2 make_error_code函數
該函數從給定的io_errc枚舉構建出錯誤碼(error_code對象)。對象
4.3 make_error_condition函數
該函數從給定的io_errc枚舉構建出錯誤狀況(error_condition對象)。
4.4 iostream_category函數
返回一個error_category對象,該對象類型與io_errc枚舉類對應的error_condition的錯誤類別相關聯。
5 Manipulators(全局函數)
- boolalpha : 將bool變量字符化(包括輸入輸出),即1->true,0->false。
- showbase : 輸出時,顯示數字的前置基數,即十六進制->0x, 八進制->0, 十進制無前置基數。
- showpoint : 顯示浮點數的小數點。
- showpos : 顯示正整數的「+」號。
- skipws : 跳過全部前置的white-space。
- unitbuf : 每次向流插入內容時,輸出緩衝區的內容。
- uppercase : 全部小寫字母都用大寫替代。
- dec、hex、oct : 分別用十進制、十六進制、八進制來表示整數。
- fixed、scientific : 分別用固定點小數法、科學計數法來表示浮點數。
- internal、left、right : 分別使數字居中、左對齊、右對齊,其中居中時會根據狀況適當的插入填充字符。