[问题] 请问使用cout不加endl为何可以正常输出?

楼主: zoooooa (喔唷唷唷唷唷)   2016-05-03 23:09:56
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
iostream
问题(Question):
小弟在 Win7 + Visual Studio 2013 中
直接使用 cout<<"123";
便可以直接显示123在萤幕上
疑问的点是
不是应该会先放置在Buffer内
直到遇见endl或flush才会输出吗?
为什么不用加endl也会直接清空缓冲区呢?
求解惑
作者: janice001 (真理)   2016-05-03 23:31:00
谁这样告诉你的?
作者: nowar100 (抛砖引玉)   2016-05-03 23:39:00
很多时机都会flush ,不只endl
楼主: zoooooa (喔唷唷唷唷唷)   2016-05-03 23:42:00
在linux下只用cout不加endl就不会有字串输出到萤幕上好奇为何在windows上却有不同执行结果
作者: LPH66 (-6.2598534e+18f)   2016-05-04 00:10:00
标准只规定 << flush 时要冲马桶, 没规定其他时候冲不冲
作者: loveflames (咕啾咕啾魔法阵)   2016-05-04 01:20:00
串一下stderr,参考一下好几年前我po的那篇
作者: black17 (喔郎)   2016-05-04 02:10:00
endl是换行的意思吧!?
作者: Caesar08 (Caesar)   2016-05-04 08:41:00
换行+flush
作者: fatrabitree (胖兔子)   2016-05-04 09:16:00
endl 是换行 会flush是因为cout是line buffered吧?
作者: loveflames (咕啾咕啾魔法阵)   2016-05-04 09:33:00
10252那篇结论我想讲的很清楚了单纯只是windows没分配buffer
作者: Caesar08 (Caesar)   2016-05-04 09:57:00
cppreference, Inserts a newline character into the output sequence漑s乸nd flushes it as if by calling漑sN4582, 27.7.3.8, 1, Calls os.put(os.widen(’\n’)),then os.flush().
作者: loveflames (咕啾咕啾魔法阵)   2016-05-04 10:03:00
原文问的是windows没加endl为何会输出,楼上丢endl不是文不对题吗
作者: Caesar08 (Caesar)   2016-05-04 10:12:00
我在回那两位不知道endl是什么的标准只规定flush要sync,以及使用相对的in与err要flush,没说其他情况不能flush(例如单纯呼叫operator<<)
作者: loveflames (咕啾咕啾魔法阵)   2016-05-04 10:26:00
印象中标准没规定不能flush的情况,反而一堆地方有规定会flush,例如exit()
作者: longlongint (华哥尔)   2016-05-04 12:17:00
因为你只用过eclipse啊(?
作者: eye5002003 (下一夜)   2016-05-11 21:29:00
所以有时候会写成cout<<"123\n";反正一样结果
作者: loveflames (咕啾咕啾魔法阵)   2016-05-12 11:49:00
回楼上,遇到fully buffered行为就不一样了

Links booklink

Contact Us: admin [ a t ] ucptt.com