作者zoooooa (喔唷唷唷唷唷)
看板C_and_CPP
标题[问题] 请问使用cout不加endl为何可以正常输出?
时间Tue May 3 23:09:56 2016
开发平台(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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1462288198.A.3A1.html
1F:→ janice001: 谁这样告诉你的? 05/03 23:31
2F:推 nowar100: 很多时机都会flush ,不只endl 05/03 23:39
3F:→ zoooooa: 在linux下只用cout不加endl就不会有字串输出到萤幕上 05/03 23:42
4F:→ zoooooa: 好奇为何在windows上却有不同执行结果 05/03 23:43
5F:推 LPH66: 标准只规定 << flush 时要冲马桶, 没规定其他时候冲不冲 05/04 00:10
6F:推 loveflames: 串一下stderr,参考一下好几年前我po的那篇 05/04 01:20
7F:推 black17: endl是换行的意思吧!? 05/04 02:10
8F:→ Caesar08: 换行+flush 05/04 08:41
9F:→ fatrabitree: endl 是换行 会flush是因为cout是line buffered吧? 05/04 09:16
10F:推 loveflames: 10252那篇结论我想讲的很清楚了 05/04 09:33
11F:→ loveflames: 单纯只是windows没分配buffer 05/04 09:34
12F:→ Caesar08: cppreference, Inserts a newline character into the o 05/04 09:57
13F:→ Caesar08: utput sequence漑s乸nd flushes it as if by calling漑s 05/04 09:57
14F:→ Caesar08: N4582, 27.7.3.8, 1, Calls os.put(os.widen(’\n’)), 05/04 09:57
15F:→ Caesar08: then os.flush(). 05/04 09:57
16F:推 loveflames: 原文问的是windows没加endl为何会输出,楼上丢endl不 05/04 10:03
17F:→ loveflames: 是文不对题吗 05/04 10:03
18F:→ Caesar08: 我在回那两位不知道endl是甚麽的 05/04 10:12
19F:→ Caesar08: 标准只规定flush要sync,以及使用相对的in与err要flush 05/04 10:15
20F:→ Caesar08: ,没说其他情况不能flush(例如单纯呼叫operator<<) 05/04 10:15
21F:推 loveflames: 印象中标准没规定不能flush的情况,反而一堆地方有规 05/04 10:26
22F:→ loveflames: 定会flush,例如exit() 05/04 10:27
23F:推 longlongint: 因为你只用过eclipse啊(? 05/04 12:17
24F:推 eye5002003: 所以有时候会写成cout<<"123\n";反正一样结果 05/11 21:29
25F:推 loveflames: 回楼上,遇到fully buffered行为就不一样了 05/12 11:49