看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) iostream 問題(Question): 小弟在 Win7 + Visual Studio 2013 中 直接使用 cout<<"123"; 便可以直接顯示123在螢幕上 疑問的點是 不是應該會先放置在Buffer內 直到遇見endl或flush才會輸出嗎? 為什麼不用加endl也會直接清空緩衝區呢? 求解惑 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.194.220.143 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1462288198.A.3A1.html
janice001: 誰這樣告訴你的? 05/03 23:31
nowar100: 很多時機都會flush ,不只endl 05/03 23:39
zoooooa: 在linux下只用cout不加endl就不會有字串輸出到螢幕上 05/03 23:42
zoooooa: 好奇為何在windows上卻有不同執行結果 05/03 23:43
LPH66: 標準只規定 << flush 時要沖馬桶, 沒規定其他時候沖不沖 05/04 00:10
loveflames: 串一下stderr,參考一下好幾年前我po的那篇 05/04 01:20
black17: endl是換行的意思吧!? 05/04 02:10
Caesar08: 換行+flush 05/04 08:41
fatrabitree: endl 是換行 會flush是因為cout是line buffered吧? 05/04 09:16
loveflames: 10252那篇結論我想講的很清楚了 05/04 09:33
loveflames: 單純只是windows沒分配buffer 05/04 09:34
Caesar08: cppreference, Inserts a newline character into the o 05/04 09:57
Caesar08: utput sequence漑s乸nd flushes it as if by calling漑s 05/04 09:57
Caesar08: N4582, 27.7.3.8, 1, Calls os.put(os.widen(’\n’)), 05/04 09:57
Caesar08: then os.flush(). 05/04 09:57
loveflames: 原文問的是windows沒加endl為何會輸出,樓上丟endl不 05/04 10:03
loveflames: 是文不對題嗎 05/04 10:03
Caesar08: 我在回那兩位不知道endl是甚麼的 05/04 10:12
Caesar08: 標準只規定flush要sync,以及使用相對的in與err要flush 05/04 10:15
Caesar08: ,沒說其他情況不能flush(例如單純呼叫operator<<) 05/04 10:15
loveflames: 印象中標準沒規定不能flush的情況,反而一堆地方有規 05/04 10:26
loveflames: 定會flush,例如exit() 05/04 10:27
longlongint: 因為你只用過eclipse啊(? 05/04 12:17
eye5002003: 所以有時候會寫成cout<<"123\n";反正一樣結果 05/11 21:29
loveflames: 回樓上,遇到fully buffered行為就不一樣了 05/12 11:49