ios_baseC++標準程式庫中的一個類,定義於<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為參數,呼叫登記的回呼函式。

參考文獻

編輯