C++ 什么时候std::cout buffer可以是非空的?

C++ 什么时候std::cout buffer可以是非空的?,c++,buffer,flush,C++,Buffer,Flush,例如,我在书中看到过cout.rdbuf。这意味着,流不能有一个与之关联的流缓冲区,它在我们刷新它之前是非空的 但是,在cout被刷新之前,我怎么能窥视cout的流缓冲区呢? 即 但在当前的代码形式中,所有内容都将在第一行之后刷新到屏幕上 那么,什么样的构造允许我窥视cout缓冲区内部 顺便说一句,我在windows7上运行VC++2010,我想这不会在第一行之后刷新,但我绝对不确定。 我经历过endl刷新,但其他人没有,可能是太多字符自动刷新,但我不知道。 我无意中创建了一个程序,简而言之:

例如,我在书中看到过cout.rdbuf。这意味着,流不能有一个与之关联的流缓冲区,它在我们刷新它之前是非空的

但是,在cout被刷新之前,我怎么能窥视cout的流缓冲区呢? 即

但在当前的代码形式中,所有内容都将在第一行之后刷新到屏幕上

那么,什么样的构造允许我窥视cout缓冲区内部


顺便说一句,我在windows7上运行VC++2010,我想这不会在第一行之后刷新,但我绝对不确定。 我经历过endl刷新,但其他人没有,可能是太多字符自动刷新,但我不知道。 我无意中创建了一个程序,简而言之:

cout << "x";
while (true) {}

程序运行了这个,输出是调试的,但它没有为我写任何东西,所以我认为程序没有达到目的…

下面的链接与这个主题密切相关


但我仍然不确定如何/何时将cout.rdbuf放到字符串上。

读取a?我尝试过,但失败了。。可能需要尝试更多David现在删除的答案是获取缓冲区的方法。然而,如果它被刷新,它将是空的。您可以检查是否设置了unitbuf,在这种情况下,每次输出操作后都会刷新输出。这称为行缓冲。这意味着在第一次或第n次插入换行符之前,不会刷新缓冲区。
cout << "x";
while (true) {}