什么时候可以冲水
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"或类似的操作。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 什么时候在C++中返回常量引用是个好主意
- 什么时候调用析构函数
- boost odeint什么时候真正调用观测者
- 编译器对数组声明大小的计算。什么时候发生?
- 什么时候最好在子进程中使用 CPU 或 I/O 密集型代码 [ C++ ]
- 您应该在什么时候创建自己的异常类型
- 我什么时候会默认(而不是删除)基类中的复制和移动操作
- 什么时候可以使用常量装饰调用我的重载函数?
- unordered_map什么时候返回 -1?
- QCoreApplication什么时候有效?
- sizeof(size_t) 和 sizeof(ptrdiff_t) 什么时候会有所不同?
- 什么时候用指针调用C++类构造函数
- 我不明白在这个例子中什么时候调用构造函数
- 如果真的需要std::move,我们应该什么时候声明右值refs
- P1008("prohibit aggregates with user-declared constructors")在实践中什么时候有用?
- 程序什么时候会创建多个堆
- 调用boost.asio的异步函数时,线程是什么时候创建的
- Swig/python : 什么时候需要 SWIG_init() ?
- 什么时候 std::initializer_list 是微不足道的可构造的?