2014-03-13 97 views
1

我想知道每次使用cout时输出缓冲区是否自动刷新和清空。 如果没有刷新,有什么办法可以“检查输出缓冲区的内容”吗? 我指的是您只使用cout而不涉及endl的情况。使用cout时输出缓冲区是否自动刷新?

考虑下面的代码:

cout << "Hello, how are you?"; //Without using endl 

我用字符串流检查如何冲洗影响缓冲。我有以下代码,但为什么输出仍显示“GoodDay”,即使我已经刷新了它?

string str; 
stringstream ss; 
ss << "GoodDay"; 
ss << flush; 
ss >> str; 
cout << str; 
+0

如果您使用'std :: endl'或写入更多的缓冲输出实际上可以容纳,它是刷新是的。至于你关于检查内容的问题,可能会看看['std :: ios_base :: register_callback'](http://en.cppreference.com/w/cpp/io/ios_base/register_callback)是有用的。 [我的答案在这里](http://stackoverflow.com/questions/22263636/fstream-c-automatic-line-addition/22263699#22263699)也可能会给你一些见解。 –

+0

因此,如果我不使用std :: endl,并且不要写超过缓冲输出可以容纳的数据,那么当我使用cout时,输出缓冲区是否仍然会被刷新?感谢您的回复。 – user3347939

+0

_'当我使用cout时,输出缓冲区仍然会被刷新吗?'_Nope ... –

回答

0

stringstream不应该在flush上丢失其内容。事实上,flush操作符对串流没有任何意义,因为任何输入都会立即写入由stringstream封装的缓冲区。这就是为什么你仍然看到“GoodDay”。