流缓冲区在C++中的工作原理

How stream-buffer works in C++?

本文关键字:工作 缓冲区 C++      更新时间:2023-10-16

我正在测试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(基本上禁用缓冲)。我不知道是否有任何实现这样做。

故事的寓意:

  • 如果需要立即输出,请冲洗;
  • 如果以后需要,请稍后再写;
  • 且仅当你不在乎任何一种方式时,按照你的方式去做。