什么时候可以冲水

When does cout flush?

本文关键字:什么时候      更新时间:2023-10-16

我知道endl或调用flush()会冲洗它。我还知道当你在cout之后调用cin时,它也会冲水。当程序退出时也是如此。还有其他cout冲洗的情况吗?

我只是写了一个简单的循环,我没有冲洗它,但我可以看到它被打印到屏幕上。为什么?谢谢!

for (int i =0; i<399999; i++) {
        cout<<i<<"n";
}

它完成的时间与endl相同,都是大约7秒。

for (int i =0; i<399999; i++) {
        cout<<i<<endl;
}

标准没有严格的规则-只有endl将刷新,但实现可能在任何时候刷新它"喜欢"。

当然,400K以下的所有数字的总和是6 * 400K = 2.4MB,这非常不可能适合缓冲区,并且循环运行得足够快,您不会注意到每次输出之间是否需要一段时间。试试这样做:

 for(int i = 0; i < 100; i++)
 {
   cout<<i<<"n";
   Sleep(1000);
 }

(如果您使用的是基于Unix的操作系统,请使用sleep(1) -或者添加一个需要一些时间的循环,等等)

编辑:应该注意的是,这不能保证显示任何差异。我知道,在我的Linux机器上,如果在这种特殊的场景中没有flush,它就不会输出任何东西——然而,有些系统可能会执行"flush on n"或类似的操作。