C++ 幾種重新整理輸出緩衝區方式
阿新 • • 發佈:2019-02-14
一下幾種情況會導致緩衝區內容被重新整理,即寫入到真實的輸出裝置或者檔案:
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); // 解除該流上已存在的捆綁