[問題] 請問使用cout不加endl為何可以正常輸出?

看板C_and_CPP作者 (喔唷唷唷唷唷)時間9年前 (2016/05/03 23:09), 編輯推噓10(10015)
留言25則, 10人參與, 最新討論串1/1
開發平台(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

05/03 23:31, , 1F
誰這樣告訴你的?
05/03 23:31, 1F

05/03 23:39, , 2F
很多時機都會flush ,不只endl
05/03 23:39, 2F

05/03 23:42, , 3F
在linux下只用cout不加endl就不會有字串輸出到螢幕上
05/03 23:42, 3F

05/03 23:43, , 4F
好奇為何在windows上卻有不同執行結果
05/03 23:43, 4F

05/04 00:10, , 5F
標準只規定 << flush 時要沖馬桶, 沒規定其他時候沖不沖
05/04 00:10, 5F

05/04 01:20, , 6F
串一下stderr,參考一下好幾年前我po的那篇
05/04 01:20, 6F

05/04 02:10, , 7F
endl是換行的意思吧!?
05/04 02:10, 7F

05/04 08:41, , 8F
換行+flush
05/04 08:41, 8F

05/04 09:16, , 9F
endl 是換行 會flush是因為cout是line buffered吧?
05/04 09:16, 9F

05/04 09:33, , 10F
10252那篇結論我想講的很清楚了
05/04 09:33, 10F

05/04 09:34, , 11F
單純只是windows沒分配buffer
05/04 09:34, 11F

05/04 09:57, , 12F
cppreference, Inserts a newline character into the o
05/04 09:57, 12F

05/04 09:57, , 13F
utput sequence漑s乸nd flushes it as if by calling漑s
05/04 09:57, 13F

05/04 09:57, , 14F
N4582, 27.7.3.8, 1, Calls os.put(os.widen(’\n’)),
05/04 09:57, 14F

05/04 09:57, , 15F
then os.flush().
05/04 09:57, 15F

05/04 10:03, , 16F
原文問的是windows沒加endl為何會輸出,樓上丟endl不
05/04 10:03, 16F

05/04 10:03, , 17F
是文不對題嗎
05/04 10:03, 17F

05/04 10:12, , 18F
我在回那兩位不知道endl是甚麼的
05/04 10:12, 18F

05/04 10:15, , 19F
標準只規定flush要sync,以及使用相對的in與err要flush
05/04 10:15, 19F

05/04 10:15, , 20F
,沒說其他情況不能flush(例如單純呼叫operator<<)
05/04 10:15, 20F

05/04 10:26, , 21F
印象中標準沒規定不能flush的情況,反而一堆地方有規
05/04 10:26, 21F

05/04 10:27, , 22F
定會flush,例如exit()
05/04 10:27, 22F

05/04 12:17, , 23F
因為你只用過eclipse啊(?
05/04 12:17, 23F

05/11 21:29, , 24F
所以有時候會寫成cout<<"123\n";反正一樣結果
05/11 21:29, 24F

05/12 11:49, , 25F
回樓上,遇到fully buffered行為就不一樣了
05/12 11:49, 25F
文章代碼(AID): #1NABz6EX (C_and_CPP)