std::endl的作用

来源:互联网 发布:超级优化txt网盘 编辑:程序博客网 时间:2024/06/06 00:36
我们知道,最后出现的 "\n "可以实现一个换行,不过我们在用C++时教程中总是有意无意地让我们使用endl,两者看上去似乎一样——究竟其中有什么玄妙?查书,书上说endl是一个操纵符(manipulator),它不但实现了换行操作,而且还对输出缓冲区进行刷新。什么意思呢?原来在执行输出操作之后,数据并非立刻传到输出设备,而是先进入一个缓冲区,当适宜的时机(如设备空闲)后再由缓冲区传入,也可以通过操纵符flush进行强制刷新: 
      cout   < <   "Hello,   World!   "   < <   "Flush   the   screen   now!!! "   < <   flush; 
      这样当程序执行到operator < <(flash)之前,有可能前面的字符串数据还在缓冲区中而不是显示在屏幕上,但执行operator < <(flash)之后,程序会强制把缓冲区的数据全部搬运到输出设备并将其清空。而操纵符endl相当于 < <   "\n "   < <   flush的简写版本,它先输出一个换行符,再实现缓冲区的刷新。大概这是因为一般的输出都是以换行结尾,而结尾处又是习惯进行刷新的时期,方便起见就把两者结合成了endl。读者有兴趣的话,回去也可以为我们的MyOutstream实现一个类似的myflush和myendl操纵符,相关的用于刷新C函数是fflush。 
              不过可能在屏幕上显示是手动刷新与否区别看来都不大。但对于文件等输出对象就不大一样了:过于频繁的刷新意味着老是写盘,会影响速度。因此通常是写入一定的字节数后再刷新,如何操作?靠的就是这些操纵符。 

原创粉丝点击