第八章 IO庫

2022-05-03 10:03:18 字數 3023 閱讀 2623

表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庫定義了讀寫內建型別值的操作。此外...