在c++中,io操作都是有io物件來實現的,每個io物件又管理乙個緩衝區,用於儲存程式讀寫的資料。
只有緩衝區被重新整理的時候緩衝區中的內容才會寫入真實的檔案或輸出裝置上。
那麼,什麼情況下會重新整理輸出緩衝區呢,有如下五種情況:
1.程式正常結束。作為main返回工作的一部分,將清空所有的輸出緩衝區。
2.在一些不確定的時候,緩衝區可能已經滿了,在這種情況下,緩衝區將會在寫下乙個值之前重新整理。
3.用操縱符顯示地重新整理緩衝區,如用endl。
4.在每次輸出操作執行完畢後,用unitbuf操縱符設定流的內部狀態,從而清空緩衝區。
5.可將輸出流與輸入流關聯起來,在讀輸入流時將重新整理其關聯的輸出緩衝區。
我們可以通過以下例項**來加深一下理解:
// 操縱符
cout << "hi!" << flush; // flushes the buffer, adds no data
cout << "hi!" << ends; // inserts a null, then flushes the buffer
cout << "hi!" << endl; // inserts a newline, then flushes the buffer
// unitbuf操縱符
cout << unitbuf << "first" << " second" << nounitbuf;
// unitbuf會在每次執行完寫操作後都重新整理流
// 上條語句等價於
cout << "first" << flush << " second" << flush;
// nounitbuf將流恢復為正常的,由系統管理的緩衝區方式
// 將輸入輸出綁在一起
// 標準庫已經將cin和cout繫結在一起
// 我們可以呼叫tie()來實現繫結
cin.tie(&cout); // the library ties cin and cout for us
ostream *old_tie = cin.tie();
cin.tie(0); // break tie to cout, cout no longer flushed when cin is read
cin.tie(&cerr); // ties cin and cerr, not necessarily a good idea!
cin.tie(0); // break tie between cin and cerr
cin.tie(old_tie); // restablish normal tie between cin and cout
c 輸出緩衝區重新整理
在c 中,io操作都是有io物件來實現的,每個io物件又管理乙個緩衝區,用於儲存程式讀寫的資料。只有緩衝區被重新整理的時候緩衝區中的內容才會寫入真實的檔案或輸出裝置上。那麼,什麼情況下會重新整理輸出緩衝區呢,有如下五種情況 1.程式正常結束。作為main返回工作的一部分,將清空所有的輸出緩衝區。2....
C 幾種重新整理輸出緩衝區方式
一下幾種情況會導致緩衝區內容被重新整理,即寫入到真實的輸出裝置或者檔案 1.程式正常結束,作為main 返回工作的一部分,將情況所有輸出緩衝區 2.一些不確定的時候,緩衝區可能已滿 3.使用manipulator 顯示屬性緩衝區,比較常用的是endl,flush,ends cout hi cout ...
重新整理緩衝區
關於重新整理緩衝區,目前的我還沒看到有什麼必要,因為感覺不用函式重新整理的就很普遍啦 首先說一說什麼叫緩衝區 在執行printf 輸出函式的時候,將要輸出的東西會發向輸出緩衝區 在c 裡叫輸出流 在執行輸入的時候,將要輸入的東西會發向輸入緩衝區 在c 裡叫輸入流 那什麼又是重新整理緩衝區呢 重新整理...