我正在测试用于流缓冲的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;
}
答案 0 :(得分:0)
缓冲区不是无限的,在非文件流的情况下,缓冲区甚至可能没有那么大。
仅仅因为您没有写std::flush
并不意味着肯定不会立即从流中得到响应。如果缓冲区已满,它将继续刷新。只是您没有强制早期刷新。
此外,您可以可能在调试模式下看到std::cout
的行为类似于std::cerr
(基本上禁用缓冲)。我不知道是否有任何实现方式。
故事的道德感