C++/ios

維基教科書,自由的教學讀本
< C++

iosw:C++標準程式庫中的一個w:頭文件,定義了C++標準中的流輸入輸出的基本類模板std::ios_base與std::basic_ios。


ios_base模板類[編輯]

ios_base是basic_ios類模版的基類,構造函數是私有的。

格式化函數[編輯]

  • flags : 返回或者重新設置所有格式標記符。
  • setf : 設置特定類別的格式標記符。
  • unsetf : 清除特定的格式標記符。
  • precision : 設置浮點數精度。
  • width : 設置域寬。

本地化函數[編輯]

  • imbue : 「灌入」區域設置。
  • getloc : 返回當前區域設置。

有關internal array的函數[編輯]

該類內部維護了一個internal extensible array作為通用數組,並且定義了三個公有函數幫助用戶使用它們。

  • xalloc(靜態) : 返回一個extensible array的新下標。
  • iword : 返回數組中對應給定下標的long元素。
  • pword : 返回數組中給定下標對應的元素指針(void*)。

事件支持[編輯]

ios_base支持事件這一概念,但只支持有限的事件。

  • event枚舉類
    • copyfmt_event : 當調用copyfmt時發生。
    • erase_event : 當stream的析構器被調用時。
    • imbue_event : 當調用ios_base::imbue時。
  • event_callback類型:ios_base以回調函數的形式來支持事件。 回調函數必須滿足以下類型void (*event_callback) (event en, ios_base& obj, int index); 其中obj是觸發事件的stream對象,index是註冊回調函數時的傳入的index參數。
  • 註冊事件回調函數
    • register_callback

其他函數[編輯]

  • sync_with_stdio(靜態) : 是否同步C++輸入輸出流和C輸入輸出對象(stdin、stdout、stderr)。

其他成員類型[編輯]

  • fmtflags : 流格式化標記符類型。
  • iostate : 流狀態標記符類型。
  • openmode : 流打開模式標記符類型。
  • seekdir : 流定位方向標記符類型。

其他成員類[編輯]

  • failure : 繼承自std::exception的異常類,用來作為輸入輸出流的基本異常類。出於兼容性考慮,這個拋異常的開關沒有打開。STL提供了ios::exceptions()函數來打開這個開關
  • Init : 八個標準流實例化的控制器。

basic_ios類模板[編輯]

成員類型[編輯]

  • char_type : 字符類型,即第一個模版參數。
  • char_traits : 萃取器,即第二個模版參數(默認為位於< string >頭文件內的char_traits萃取器)。

構造器[編輯]

構造函數需要兩個類型:charT、traits。 一個是字符類型,另一個是字符萃取器,兩者都只和字符有關。

狀態標記函數[編輯]

std::basic_ios<CharT,Traits>下定義了四個狀態標記位:good、eof、fail、bad。可以用下述成員函數訪問這些狀態標記位:

  • good : 檢測流狀態是否為good。
  • eof : 檢測end-of-file 標記位是否被置為1,即是否到文件末尾。
  • fail : 檢測 fail標記位 或者 bad標記位 是否被置為1,即先前是否有操作失敗。
  • bad : 檢測bad標記位是否被置為1, 即先前是否有操作導致了嚴重錯誤(致使流的完整性遭到破壞)。
  • operator !() 、operator bool() : 檢測流的狀態是否正常,即是否有操作失敗或導致了嚴重錯誤(fail or bad)。等效於調用fail()函數。
  • rdstate、setstate : 返回或者設置所有狀態標記位。
  • clear : 清除狀態標記位。注意,不是清空 流的字符緩衝區。

格式化函數[編輯]

  • coptfmt : 將給定的basic_ios對象的內部格式copy給自身。
  • fill : 返回、設置填充字符(當設定的寬度大於實際輸出寬度時,才會出現填充情況)。

其他函數[編輯]

  • 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類型字符(通常是寬字符)。

錯誤報告[編輯]

io_errc 枚舉類[編輯]

這個枚舉類定義了input/output 的錯誤情況。 C++標準只要求該枚舉類定義stream枚舉,但具體的庫可以自己實現額外的枚舉。

make_error_code函數[編輯]

該函數從給定的io_errc枚舉構建出錯誤碼(error_code對象)。 make_error_condition函數=== 該函數從給定的io_errc枚舉構建出錯誤情況(error_condition對象)。

iostream_category函數[編輯]

返回一個error_category對象,該對象類型與io_errc枚舉類對應的error_condition的錯誤類別相關聯。

無參Manipulators函數[編輯]

  • boolalpha : 將bool變量字符化(包括輸入輸出),即1->true,0->false。
  • showbase : 輸出時,顯示數字的前置基數,即十六進制->0x, 八進制->0, 十進制無前置基數。
  • showpoint : 顯示浮點數的小數點。
  • showpos : 顯示正整數的「+」號。
  • skipws : 跳過所有前置的white-space。
  • unitbuf : 每次向流插入內容時,輸出緩衝區的內容。
  • uppercase : 所有小寫字母都用大寫替代。
  • dec、hex、oct : 分別用十進制、十六進制、八進制來表示整數。
  • std::fixed, std::scientific, std::hexfloat, std::defaultfloat : 分別用固定點小數法、科學計數法來表示浮點數。
  • internal、left、right : 分別使數字居中、左對齊、右對齊,其中居中時會根據情況適當的插入填充字符。
  • get_money: parses a monetary value
  • put_money: formats and outputs a monetary value
  • get_time: parses a date/time value of specified format
  • put_time: formats and outputs a date/time value according to the specified format
  • quoted: inserts and extracts quoted strings with embedded spaces

參考文獻[編輯]