C++ Primer 筆記-第8章 IO庫

8.1 IO 類
iostream
?定義了用于讀寫流的基本類型。fstream
?定義了讀寫命名文件的類型。sstream
?定義了讀寫內(nèi)存?string
?對象的類型。為了支持使用寬字符的語言,標準庫定義了一組類型和對象來操作?
wchar_t
?類型的數(shù)據(jù)。寬字符版本的類型和函數(shù)的名字以?w
?開始,例如?wcin, wcout
?等。
8.1.1 IO 對象無拷貝或賦值
不能將形參或返回類型設置為流類型。
進行 IO 操作的函數(shù)通常以引用方式傳遞和返回流。
傳遞和返回的引用不能是?
const
?的。
8.1.2 條件狀態(tài)
由于流可能處于錯誤狀態(tài),因此代碼通常應該在使用一個流之前檢查它是處于良好狀態(tài),最簡單的方法是將它當作一個?條件?來使用。
IO 庫定義了一個與機器無關(guān)的?
iostate
?類型,它提供了表達流狀態(tài)的完整功能。這個類型應作為一個?位集合?來使用。IO 庫定義了 4 個?
iostate
?類型的?constexpr
?值(strm::badbit, strm::failbit, strm::eofbit, strm::goodbit
),表示特定的位模式。這些值用來表示特定類型的 IO 條件,可以與位運算符一起使用來一次性檢測或設置多個標志位。badbit
?表示系統(tǒng)級錯誤,如不可恢復的讀寫錯誤。通常情況下一旦?badbit
?被置位,流就無法再使用了。在發(fā)生可恢復錯誤后?
failbit
?被置位,如期望讀取數(shù)值卻讀出一個字符等錯誤。這中問題通常是可以修正的,流還可以繼續(xù)使用。如果到達文結(jié)束位置,
eofbit
?和?failbit
?都會被置位。goodbit
?的值為 0 表示流未發(fā)生錯誤,如果?badbit
、failbit
和eofbit
?任一個被置位,則檢測流狀態(tài)的條件會失敗。流對象的?
rdstate
?成員返回一個?iostate
?值,對應流的當前狀態(tài)。setstate
?操作將給定條件位置位,表示發(fā)生了對應錯誤。clear
?不接受參數(shù)的版本清除(復位)所有錯誤標識位。帶參數(shù)的版本接受一個?iostate
?值,表示流的新狀態(tài)。
8.1.3 管理輸出緩沖
每一個輸出流都管理一個緩沖區(qū),用來保存程序讀寫的數(shù)據(jù)。
endl
?完成換行并刷新緩沖區(qū)的工作;flush
?刷新緩沖區(qū)但不輸出任何額外的字符;ends
?向緩沖區(qū)插入一個空字符,然后刷新緩沖區(qū)。使用?
unitbuf
?告訴流在接下來的每次寫操作之后都進行一次?flush
?操作(每次輸出操作后都刷新緩沖區(qū));使用?nounitbuf
?則重置流使其恢復使用正常的系統(tǒng)管理的緩沖區(qū)刷新機制。如果程序異常終止,輸出緩沖區(qū)是不會被刷新的。當調(diào)試崩潰程序時實際上代碼已經(jīng)執(zhí)行了,只是程序崩潰后緩沖區(qū)沒有被刷新,輸出數(shù)據(jù)被掛起沒有打印而已。
當一個輸入流被關(guān)聯(lián)到一個輸出流時,任何試圖從輸入流讀取數(shù)據(jù)的操作都會先刷新關(guān)聯(lián)的輸出流。標準庫將?
cout
?和?cin
?關(guān)聯(lián)在一起。每個流同時最多只能關(guān)聯(lián)到一個流,但多個流可以同時關(guān)聯(lián)到同一個?
ostream
。

8.2 文件輸入輸出
8.2.1 使用文件流對象
當一個?
fstream
?對象被銷毀時,close
?會自動被調(diào)用。
8.2.2 文件模式
保留?
ofstream
?打開的文件中已有數(shù)據(jù)的唯一方法是顯示指定?app
?或?in
?模式。

