第八章 IO庫

2021-07-01 23:05:09 字數 1152 閱讀 8925

由於不能拷貝 io 物件,因此我們也不能將形參或返回型別設定為流型別。進行 io 操作的函式通常以引用方式傳遞和返回流。讀寫乙個 io 物件會改變其狀態,因此傳遞和返回的引用不能是 const 。

導致緩衝區重新整理(即,資料真正寫到輸出裝置或檔案)的原因:

①程式正常結束,作為 main 函式的 return 操作的一部分,緩衝重新整理被執行。

②緩衝區滿時,需要重新整理緩衝,而後新的資料才能繼續寫入緩衝區。

③我們可以使用操縱符如 endl 來顯示重新整理緩衝區。

④在每乙個輸出操作之後,我們可以用操縱符 unitbuf 設定流的內部狀態,來清空緩衝區。預設情況下,對 cerr 是設定 unitbuf 的,因此寫到 cerr 的           內容都是立即重新整理的。

⑤乙個輸出流可以被關聯到另乙個流。在這種情況下,當讀寫被關聯的流時,關聯到的流的緩衝區會被重新整理。例如,預設情況下, cin 和 cerr 都關聯到         cont 。因此,讀 cin 或寫 cerr 都會導致 cout 的緩衝區被重新整理。

如果程式異常終止,輸出緩衝區是不會被重新整理的。當乙個程式崩潰後,它所輸出的資料很可能停留在輸出緩衝區中等待列印。

當乙個輸入流被關聯到乙個輸出流時,任何檢視從輸入流讀入資料的操作都會先重新整理關聯的輸出流。標準庫將 cout 和 cin 關聯在一起。互動式系統通常應該關聯輸入流和輸出流。這意味著所有輸出,包括使用者提示資訊,都會在讀操作之前被列印出來。

對於檔案流,如果呼叫 open 失敗, failbit 會被置位。因為呼叫 open 可能失敗,進行 open 是否成功的檢測通常是乙個好習慣。 if ( out )  // 檢查open是否成功

如果 open 成功,則 open 會設定流的狀態,使得 good() 為 true 。

實際上,對於乙個已經開啟的檔案流呼叫 open 會失敗,並會導致 failbit 被置位。

當乙個檔案流物件被銷毀時, close 會被自動呼叫。

指定檔案模式有如下限制:

①只可以對 ofstream 或 fstream 物件設定 out 模式。

②只可以對 ifstream 或 fstream 物件設定 in 模式。

③只有當 out 也被設定時才可設定 trunc 模式。

④當我們的某些工作是對整行文字進行處理,而其他一些工作是處理行內的單個單詞時,通常使用 istringstream 。

第八章 IO庫

表8.1是標準庫中的這些io型別和標頭檔案 為支援寬字元語言,標準庫定義的io類也可操縱wchar t型別資料,它對應的型別和函式名以w開始 裝置型別和字元寬度不會影響io操作,例如 運算子對控制台視窗 檔案 字串都可用,對char和wchar t也可用 通過繼承,標準庫可忽略這些不同裝置和不同字元...

c primer 第八章 IO庫

1.常用的io庫設施 istream型別,提供輸入操作 ostream型別,提供輸出操作 cin,乙個istream物件,從標準輸入讀資料 cout,乙個ostream物件,向標準輸出寫入資料 cerr,乙個ostream物件,向標準錯誤寫資訊。從乙個istream物件讀資料 向乙個ostream物...

C Primer 第八章 IO庫

1.3 管理輸出緩衝 2.檔案輸入輸出 2.2 檔案模式 3.string 標準庫的核心就是很多容器和一族泛型演算法,這些設施幫助我們編寫簡潔高效的程式。標準庫會關注那些薄記操作的細節,特別是記憶體管理,這樣我們的程式就可以將全部的注意力投入到需要解決的問題上。io庫定義了讀寫內建型別值的操作。此外...