表8.1是標準庫中的這些io型別和標頭檔案
為支援寬字元語言,標準庫定義的io類也可操縱wchar_t
型別資料,它對應的型別和函式名以w
開始
裝置型別和字元寬度不會影響io操作,例如>>
運算子對控制台視窗、檔案、字串都可用,對char和wchar_t也可用
通過繼承
,標準庫可忽略這些不同裝置和不同字元寬度的流的差異。利用模板
,可以使用具有繼承關係的類
宣告乙個類繼承
自另乙個類,則通常可將派生類
當作基類
來使用
型別ifstream和istringstream都繼承自istream,即可以像使用istream物件一樣使用ifstream和istringstream物件
本節所述的流特性都可無差別地應用於普通流、檔案流、字串流,以及char和wchar_t版本
badbit、failbit、eofbit中的任乙個被置位,則檢測流狀態的條件都會失敗
表8.2中,定義了一組函式來查詢這些iostate標誌位的狀態,
將流當作條件時,等價於判斷!fail()
,而eof()
和bad()
操作只能表示特定錯誤
表8.2中定義的rdstate()
操作返回iostate型別值,表示當前狀態
表8.2中定義的setstate()
操作接受iostate型別值,將給定的條件位置位,表示發生了對應錯誤
表8.2中定義的clear
成員函式有兩個版本:
例子:rdstate、setstate、clear
123
45
auto old_state=cin.rdstate(); //儲存cin的狀態
cin.clear(); //清除錯誤位,使之有效
process_input(cin); //使用cin
cin.setstate(old_state); //將cin置為原來的狀態
cin.clear(cin.rdstate() & ~cin.failbit & ~cin.badbit); //復位failbit和badbit,其他位不變
操縱符endl、flush、ends顯式重新整理:
unitbuf
操作符告訴流,接下來的每次寫操作之後都進行flush
nounitbuf
操作符重置流,使其恢復預設重新整理
例子:endl、flush、ends、unitbuf、nounitbuf
123
45
cout<
cout<
cout<
cout<
cout<
每個流最多同時關聯乙個流,但多個流可同時關聯到同乙個ostream
例子:流的關聯
123
4
cin.tie(&cout); //將cin關聯到cout
ostream *old_tie=cin.tie(nullptr); //使cin不再關聯到任何流
cin.tie(&cerr); //將cin關聯到cerr
cin.tie(&old_tie); //重建cin和cout間的正常關聯
fstream中的這些型別繼承自iostream的對應型別,它們提供的操作類似cin和cout,即<<
、>>
、getline
等,以及8.1節中的所有操作
表8.3是fstream中比iostream新增的成員
123456
ifstream in(ifile); //初始化時關聯到檔案
ofstream out; //預設初始化
out.open(ifile+".copy"); //開啟檔案
if (out) //先檢查是否成功關聯到檔案,再使用流
in.close(); //乙個檔案流開啟另乙個檔案前,必須關閉當前檔案
in.open(ifile+"2"); //開啟另乙個檔案
每個檔案流型別都定義了預設的檔案模式:
同乙個流,每次用open關聯到不同檔案時,都可改變模式
例子:指定模式
123
4567
//以下3條等價,都會截斷file1
ofstream out("file1");
ofstream out("file1", ofstream::out);
ofstream out("file1", ofstream::out|ofstream::trunc);
標頭檔案sstream中定義的型別都繼承自iostream中對應的型別
表8.5是sstream中定義的型別的特有操作
第八章 IO庫
由於不能拷貝 io 物件,因此我們也不能將形參或返回型別設定為流型別。進行 io 操作的函式通常以引用方式傳遞和返回流。讀寫乙個 io 物件會改變其狀態,因此傳遞和返回的引用不能是 const 導致緩衝區重新整理 即,資料真正寫到輸出裝置或檔案 的原因 程式正常結束,作為 main 函式的 retu...
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庫定義了讀寫內建型別值的操作。此外...