是否建议C ++程序员经常编写像
这样的行std::cout << "output: " << i << " and " << j << std::flush;
//more
std::cout << "ending newline." << std::endl; //endl does flush
换句话说,在没有endl
的输出行中,为了以防万一,我们应该flush
很多吗?或者这些天在大多数平台上不再需要这个了吗?
答案 0 :(得分:17)
您的平均课程不需要经常冲洗。在某些情况下,冲洗是一种特殊情况:
如果不需要缓冲,最好先禁用缓冲,而不是投入大量的冲洗。
大多数情况下,程序通过启用缓冲而受益。有时他们会在这里和那里产生一些角色。其他时候,他们输出了一线。
在我几十年的工程设计中,我最显着的性能提升通常只是通过改善缓冲来实现。有时通过将默认FILE
缓冲区大小增加到512字节(默认值)到4K或32K(有时更高)。其他时候通过添加一层缓冲或缓存。通常,每次通过操作系统的i / o系统都会产生很高的开销。减少系统调用的总数(通常)是一种简单而高效的方案,可以提高性能。
答案 1 :(得分:14)
刷新通常不是最常进入的习惯,因为如果你不断写出IO,刷新有时可能会减慢程序的速度。您可以通过明确使用std::endl
或std::flush
(std::endl
只需将\n
插入流中,然后调用flush
)来控制刷新方式。< / p>
@StackedCrooked in the C++ Lounge汇总了一项关于冲洗费用而不是冲洗费用的实验:http://coliru.stacked-crooked.com/view?id=55c830cf9a144559f31963de41fa9405-f674c1a6d04c632b71a62362c0ccfc51
重复使用后,非刷新功能相对较好,而每次调用时刷新都会增加一些开销:老实说,最好不要手动std::flush
- 你的流。只需在程序结束时或在关键代码段结束后执行一次。
同样值得注意的是,您应该在对用户执行任何操作之前进行刷新,因此程序不会将内容写入用户应在日志文件或其他位置看到的输出。< / p>
编辑: 相关类比:In simple terms, what is the purpose of flush() in ostream