IO庫簡介

一、 IO類

1、在IO類中有三個獨立的頭文件,如下:

  • iostream:定義了用於讀寫的基本類型
  • fstream:定義讀寫命名文件的類型
  • sstream:定義讀寫內存中string對象的類型

2、IO庫類型和文件:

頭文件 類型
iostream istream:從流中讀取數據
ostream:向流中寫入數據
iostream:讀寫流
fstream ifstream:從文件中讀取數據
ofstream:向文件中寫入數據
fstream:讀寫文件
sstream istringstream:從string 中讀取數據
ostringstream:向string 中寫入數據
stringstream:讀寫string

3、各類型的繼承關係
在這裏插入圖片描述
4、不能對IO對象進行拷貝或這賦值

// 正確,可以將初始值與流對象進行綁定初始化
ofstream out1("D:\\Files\\TheFile\\log01.txt");

// 錯誤,不能對流對象進行賦值
ofstream out2;
out2 = out1;

因爲不能進行拷貝流對象,因此不可以將形參或返回類型設置爲流類型。進行IO操作的函數通常以引用方式來傳遞和返回流。讀寫一個IO對象會改變其狀態,因此傳遞和返回的引用不能爲const

5、IO對象操作的條件狀態
在IO操作中一個流一旦發生錯誤,其上後續的IO操作都會失敗。由於流可能會出現錯誤,因此在使用一個流之前最好要檢查它是否處於良好的狀態。可以將其當作一個條件來進行使用。

while(cin>>word) 
{
	//當以上流無錯誤時纔會進行對應的操作。
}

while 循環檢查條件中所返回流的狀態,如果輸入操作成功,流保持有效狀態,此時條件爲真。

6、輸出緩衝管理

(1)、每個輸出流都管理一個緩衝區,用來保存程序讀寫的緩衝數據。如執行 cout<<"hello"; 代碼,文本可能立刻打印,也可能被操作系統保存到緩衝區中,隨後才進行打印。有了設備緩衝機制,操作系統就可以將多個輸出操作組合成單一的系統級寫操作。由於設備的寫操作會很耗時,這樣的操作可以大大的提高系統的性能。
(2)、導致緩衝刷新的主要原因如下:

  • 程序正常結束時,緩衝被刷新。
  • 緩衝區滿時,需要刷新緩衝,才能將新的數據寫入到緩衝區
  • 可以使用endl來顯式的刷新緩衝區。
  • 可以使用操作符unitbuf來設置內部流狀態,清空緩衝區。默認情況下對cerr是設置unitbuf的,因此寫到cerr中的內容是立刻被刷新的。
  • 一個輸出流可能會被關聯到另一個流,這種情況下,當讀寫被關聯的流時,關聯到的流的緩衝區會被刷新。如默認cincerr都關聯到cout。因此讀cin或寫cerr都會導致cout的緩衝區被刷新。

(3)、IO庫中有三個操縱符:endlflushends。其中endl刷新緩衝區並換行;flush刷新緩衝區,但是不輸出任何額外字符;ends向緩衝區中插入一個空字符,然後刷新緩衝區。

cout << "hi" << endl; //輸出hi和一個換行符,然後刷新緩衝區
cout << "hi" << flush; //輸出hi,然後刷新緩衝區,不附加任何額外字符
cout << "hi" << ends; //輸出hi和一個空格,然後刷新緩衝區

(4)、unitbuf 操縱符。如果向每次輸出操作後都刷新緩衝區,可以使用 unitbuf。它在接下來的每次寫操作之後都進行一次flush操作。而nounitbuf則重置流,使其恢復之前的狀態。

//所有輸出操作後都立即刷新緩衝區
cout<<unitbuf;

//回到正常緩衝方式
cout<<nounitbuf;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章