1. 程式人生 > >C++ 幾種重新整理輸出緩衝區方式

C++ 幾種重新整理輸出緩衝區方式

一下幾種情況會導致緩衝區內容被重新整理,即寫入到真實的輸出裝置或者檔案:

1. 程式正常結束, 作為main 返回工作的一部分,將情況所有輸出緩衝區;

2. 一些不確定的時候,緩衝區可能已滿;

3. 使用manipulator 顯示屬性緩衝區, 比較常用的是endl, flush, ends:

 cout<<"hi"<<endl ;    // 插入換行,同時重新整理輸出緩衝區  ,end line 所以換行

cout<<"hi"<<ends;      //末尾插入null, 重新整理快取區    ,  end string (const string *), 所以加null

cout<<"hi"<<flush;      // 重新整理快取區,不新增任何資料

4.  使用unitbuf 設定流的內部狀態, 適合所有輸出都要重新整理緩衝區,unitbuf 和nounitbuf 之間的區域每次寫完後都重新整理流

cout<<unitbuf<<"first"<<"second"<<nounitbuf;

等價於

cout<<"first"<<flush<<"second"<<flush;

5. 使用tie 將輸入流和輸出流關聯起來,  這種情況下,在讀輸入流時將重新整理其關聯的輸出緩衝區,標準庫預設將cout 和cin 綁在一起;

cin.tie(&cout);   // cin 和cout 關聯

cin.tie(0);    // 解除該流上已存在的捆綁