cout如何刷新緩沖區


#include<iostream>
#include<cstdlib>
usingnamespace std;
int main()
{
    cout<<"b";
    system("PAUSE");
    return 0;    
}



為什么程序沒有結束,也沒有用endl,flush刷新緩沖區,b照樣能輸出呢?

cout<<"b"; 就是向 stdout 輸出 "b"; 不需要等待

endl 是 輸出 '\n' 再調 flush.
flush 是 清緩沖區。
通常,清緩沖區 用於 清輸入緩沖區,而不是輸出緩沖區。

只有在編譯程序時,要求優化。例如 頻繁循環輸出,和 頻繁循環交替輸入輸出 情況下,會不及時輸出,而是等到緩沖區有一定數容量內容時再輸出。這種情況下,才用endl 或 flush 迫使 程序及時輸出。

cout 這是一個流對象而已,沒有刷新的功能
是endl 有這個功能
它不但實現了換行操作,而且還對輸出緩沖區進行抄刷新。什么意思呢?原來在執行輸出操作之后,數據並非立刻傳到輸出設備,而是先進入一個緩沖區,當適宜的時機(如設襲備空閑)后再由緩沖區傳入,也可以通過操縱符flush進行強制刷新:
cout << "Hello, World! " << "Flush the screen now!!!" << flush;
這樣當程序執行到operator<<(flush)之前,有可能前面知的字符串數據還在緩沖區中而不是顯示在屏幕上,但執行operator<<(flush)之后,程序會強制把緩沖區的數據全部搬運到輸出設備並將其清空。道而操縱符endl相當於<< "\n" << flush的簡寫版本,它先輸出一個換行符,再實現緩沖區的刷新。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM