C++ primer 第八章

1. 如果函數有基類類型的引用形參,可以給函數傳遞其派生類型的對象。如,一個函數有istream&形參,可以傳遞ifstream或者istringstream對象。

 

2. 只有支持複製的元素類型可以存儲在vector或者其他容器類型中。流對象不能複製,所以不能。

 

3. 形參或返回類型也不能爲流類型,可以傳遞或返回指向該對象的指針或者引用。

 

4. 除了endl,flush可用於刷新流,但不在輸出中添加任何字符;ends也可用於刷新流,在輸出中插入空字符null。

如果要刷新所有輸出,用unitbuf操作符,在每次執行完寫操作後都刷新流。如果要取消unitbuf的效果,試用nounitbuf操作符。

cout<< unitbuf <<"aaa" <<"bbb"<< nounitbuf;


5. 如果程序崩潰,嘖不會刷新緩衝區。如果想要通過輸出來找到錯誤,最好在每次輸出後刷新緩衝區。

 

6. 由於歷史原因,IO標準庫使用C風格字符串。

string input_file;
ifstream infile(input_file.c_str());


7. 關閉流並不能改變流對象的內部狀態。如果最後的讀寫操作失敗了,對象的狀態將保持爲錯誤狀態,即使使用close()函數也不能恢復狀態。所以需要調用clear()函數重新恢復流的狀態。

 

8. 打開模式:

app: 每次寫之前,找到文件尾。

ate:  打開文件後,定位到文件尾。

trunc: 打開文件時,清空文件內容。

幾個組合方法:out | app, in |out等等

 

9. sstream輸入和輸出操作可自動把算數類型轉化爲相應的string表示形式,反之也可以。

int num1=100,num2=200,num3,num4;
ostringstream oss;
oss<<"num1: "<<num1<<"\n"<<"num2: "<< num2<<endl;

istringstream iss(oss.str());
string temp;
iss>>temp>>num3>>temp>>num4;

cout<<num3<<"\t"<<num4<<endl; //輸出爲100   200


 

發佈了84 篇原創文章 · 獲贊 9 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章