输出缓冲区不会刷新的情况?

时间:2017-11-05 06:21:05

标签: c++ buffer iostream outputstream

我正在学习iostream个对象并刷新缓冲区。我知道何时保证刷新输出缓冲区以及如何显式刷新缓冲区。但是,我从未见过输出缓冲区刷新的情况。在我看来,即使我不使用诸如endlflushends之类的操纵符,输出缓冲区也会在每个语句的末尾被刷新。

那么,是否有任何简单的示例(其中输出缓冲区不会(或至少可能经常不会)刷新?我觉得我需要看到这样的情况才能真正理解输出缓冲区。

1 个答案:

答案 0 :(得分:3)

取决于系统。

以下面的程序为例:

#include <iostream>
#ifdef WIN32
#include <windows.h>
#define sleep(n) Sleep((n)*1000)
#else
#include <unistd.h>
#endif

using namespace std;

int main()
{
    cout << "This is line 1";
    sleep(4);
    cout << endl;
    cout << "This is line 2" << endl;

    return 0;
}

通过检查程序,您可能会猜测该程序将打印This is line 1,然后暂停4秒,然后打印This is line 2

如果您使用Visual Studio进行编译以在Windows上运行,那么您将获得确切的行为。

然而,在Linux和其他Unix操作系统上,程序在将两条线打印在一起之前似乎是静音4秒。输出不会可靠地刷新,直到在输出流中遇到新的行字符。