流缓冲区在C++中的工作原理
How stream-buffer works in C++?
我正在测试C++流缓冲的代码。就我对缓冲思想的理解而言,即使 for 循环的形式存在延迟,下面的代码应该同时打印出"Before loop"和"After loop"。问题是它以循环延迟打印它们。有人可以向我解释原因吗?我把cout作为一个论据。
void testBuffer(ostream& os){
os << "Before loop - ";
for(int i = 0; i < 2000000000; i++){
// waste time
}
os << "After loop " << endl;
}
缓冲区
不是无限的,在非文件流的情况下,可能甚至不是那么大。
仅仅因为你没有写std::flush
并不意味着流肯定不会立即响应。如果缓冲区已满,它仍然会刷新。只是你没有强迫提前冲洗。
此外,您可能会看到std::cout
在调试模式下的行为类似于std::cerr
(基本上禁用缓冲)。我不知道是否有任何实现这样做。
故事的寓意:
- 如果需要立即输出,请冲洗;
- 如果以后需要,请稍后再写;
- 当且仅当你不在乎任何一种方式时,按照你的方式去做。
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- C++字符*缓冲区的大小
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 导入库可以跨dll版本工作吗
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- C++缓冲区是如何工作的(关于空白)
- 只有第一个缓冲区可以在C++中实现的Double缓冲区中工作
- 编译的谷歌协议缓冲区不工作(C++)
- 用于了解输入和输出流缓冲区实际工作方式的程序
- 将缓冲区转换为在现有程序中工作的iStream
- 缓冲区刷新究竟是如何工作的(std::endl 和 之间的区别)?
- 流缓冲区在C++中的工作原理
- 流到缓冲区工作,文件到缓冲区不起作用
- OpenGL的缓冲区是如何工作的?
- OpenGL累积缓冲区不工作
- GzipOutputStream和GzipInputStream与协议缓冲区的简单工作示例
- 为什么getchar像缓冲区一样工作,而不是像预期的那样实时工作?
- DirectX10上的深度缓冲区不工作
- DirectX Z缓冲区工作不正常
- D3D10常量缓冲区不工作