ios_base
ios_base 是C++標準程式庫中的一個類,定義於<ios>標頭檔中。ios_base類封裝了C++標準中的流輸入輸出中不依賴於讀寫的數據的類型的基本資訊,如格式化資訊、異常狀態、事件回呼函數等。
C++程式設計時,一般不會直接呼叫std::ios_base的成員函數,但是會經常用到該類中定義的各種流的數據格式的列舉值常數。如ios_base::hex、ios_base::skipws等等。
儲存的各種資訊
編輯在類std::ios_base中,儲存了下述關於流的資訊:
- 格式控制資訊的列舉類型fmtflags ,影響到如何解釋輸入序列的格式、如何生成輸出序列的格式,例如整數是16進制還是10進制表示,浮點數是科學計數法還是定點形式等;
- 流的狀態的列舉類型iostate,如數據是否完整、是否到達流的末尾、是否讀寫失敗等;
- 流的打開方式的列舉類型openmode,如讀取、寫入、追加、建立時刪除原內容、二進制打開、
- 流的定位位置的列舉類型seekdir,如開始位置、當前位置、結尾位置等。
- 流的事件的列舉類型event,如「擦除」事件erase_event,改變locale設置事件imbue_event,複製格式事件copyfmt_event。
- 流的私用的其它額外儲存的數據,為一個long型陣列與一個指標陣列。
- 一個成員類failure,用於作為C++標準中的流輸入輸出類別館投擲的各種異常的基礎類別。
- 一個成員類Init,用於封裝cout、cin、wcout等8個靜態對象的初始化函數。
成員函數
編輯狀態函數
編輯- ios_base::flags,讀取/設置流的格式。
- ios_base::setf,設置流的格式,與原有格式合併。
- ios_base::unsetf,根據參數mask,清除流的格式的某些位(bit)。
- ios_base::precision,讀取/設置顯示浮點數時的精度。
- ios_base::width,讀取/設定流的輸出數據的顯示寬度。
locale相關函數
編輯- ios_base::imbue,設置新的locale,並依次執行所有登記的回呼函數處置imbue_event。
- ios_base::getloc,讀取當前locale設置
靜態成員函數
編輯- ios_base::sync_with_stdio,設置流的內部標誌位,確定是否與C執行時庫的stdio在輸入輸出上同步。
私用數據儲存函數
編輯- ios_base::xalloc,返回一個對於行程中的多線程來說是唯一的一個整形值,這個值對應於流的一個主記憶體塊的索引,該主記憶體塊可儲存一個long或者指標值。
- ios_base::iword,根據輸入的索引值,返回流的一個主記憶體塊的參照,可保持一個long值。
- ios_base::pword,根據輸入的索引值,返回流的一個主記憶體塊的參照,可保持一個指標值。
回呼函數
編輯- ios_base::register_callback,登記一個回呼函數。一個流的所有回呼函數的地址儲存在一個單向鏈結串列中。如果某個事件發生,則以登記的逆序依次呼叫每個回呼函數。每個回呼函數內部一般有個switch陳述式,進入相應的事件的處理分支。
構造/解構函式
編輯- ios_base::ios_base
- ios_base::~ios_base:銷毀前用erase_event為參數,呼叫登記的回呼函數。