流缓冲区在C ++中如何工作?

时间:2019-01-25 16:42:34

标签: c++ stream buffer cout

我正在测试用于流缓冲的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;

    }

1 个答案:

答案 0 :(得分:0)

缓冲区不是无限的,在非文件流的情况下,缓冲区甚至可能没有那么大。

仅仅因为您没有写std::flush并不意味着肯定不会立即从流中得到响应。如果缓冲区已满,它将继续刷新。只是您没有强制早期刷新。

此外,您可以可能在调试模式下看到std::cout的行为类似于std::cerr(基本上禁用缓冲)。我不知道是否有任何实现方式。

故事的道德感

  • 如果您需要立即输出,请刷新;
  • 如果以后需要,请稍后再写;
  • 如果并且仅当您不在乎这两种方式时,请按照您完成的方式进行操作。
相关问题