#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的簡寫版本,它先輸出一個換行符,再實現緩沖區的刷新。