cout什么时候冲洗?

Arc*_*ect 7 c++ buffer iostream cout

我知道endl或打电话flush()会冲洗它.我也知道,当你调用cincout,它刷新了.并且当程序退出时.还有其他情况会cout冲洗吗?

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

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

        cout<<i<<"\n";

}
Run Code Online (Sandbox Code Playgroud)

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

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

        cout<<i<<endl;

}
Run Code Online (Sandbox Code Playgroud)

Mat*_*son 6

标准没有严格的规则 - 只有endlWILL刷新,但实现可能会随时刷新"喜欢".

当然,400K以下的所有数字的总和是6*400K = 2.4MB,并且这不太适合缓冲区,并且循环足够快以便运行,如果它需要一段时间,您将不会注意到每个输出.尝试这样的事情:

 for(int i = 0; i < 100; i++)
 {
   cout<<i<<"\n";
   Sleep(1000);
 }
Run Code Online (Sandbox Code Playgroud)

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

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

  • C++现在有`std :: this_thread :: sleep_for` (4认同)