cout什么时候冲洗?

时间:2014-03-12 07:56:47

标签: c++ buffer iostream cout

我知道endl或致电flush()会将其清除。我也知道,当您在cin之后拨打cout时,它也会刷新。并且当程序退出时。还有其他情况cout正在冲洗吗?

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

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

        cout<<i<<"\n";

}

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

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

        cout<<i<<endl;

}

1 个答案:

答案 0 :(得分:5)

标准没有严格的规则 - 只有endl会刷新,但实施可能会随时刷新它喜欢&#34;。

当然,400K以下的所有数字的总和是6 * 400K = 2.4MB,并且它不太可能适合缓冲区,并且循环速度足够快以便你赢得了#39 ;注意每个输出之间是否需要一段时间。尝试这样的事情:

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

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

编辑:应该注意,这不能保证显示任何差异。我知道在我的Linux机器上,如果你在这种特殊类型的场景中没有同花,它就不会输出任何东西 - 但是,有些系统可以在\ n&#34上刷新\ n&#34 ;或类似的东西。