(点击上方公众号,可快速关注)
前言
一直用std::endl
输出换行符,理所当然认为下面的代码等价:
std::cout << "Hello Wolrd" << std::endl;
std::cout << "Hello Wolrd" << '\n';
虽然输出内容是一样的,但行为却有差异:std::endl
将\n
插入流后,然后刷新缓冲区。所以,std::endl
执行后,"Hello Wolrd"
会立刻打印出来,而第二个语句则可能会将结果暂时缓冲起来,不会立刻打印。
其他缓冲区相关的操纵符
std::flush
用于刷新缓冲区,上面的语句也可以写成:
std::cout << "Hello Wolrd" << '\n' << std::flush;
std::unitbuf
启用输出流的自动刷新,效果是每次输出操作都会刷新缓冲区,效果类似C中的无缓冲设置,这样可能会影响输出的性能。用法:
std::cout << "Hello Wolrd" << std::unitbuf;
std::nounitbuf
关闭输出流的自动刷新,与std::unitbuf
功能相反。
还有一个特殊的操纵符:std::ends
,它只是将null字符插入到输出流中,不会刷新缓冲区,很多资料的描述是错误的,需要注意下。
喜欢我的文章,请关注我的公众号。转载请标明出处。