【发布时间】:2014-03-13 20:00:18
【问题描述】:
我想知道每次使用cout 时输出缓冲区是否会自动刷新和清空。
如果没有刷新,有什么办法可以“检查输出缓冲区的内容”吗?
我指的是你只使用cout而没有涉及endl的情况。
考虑以下代码:
cout << "Hello, how are you?"; //Without using endl
我使用 stringstream 来检查刷新如何影响缓冲区。我有以下代码,但是为什么我已经刷新了输出仍然显示“GoodDay”?
string str;
stringstream ss;
ss << "GoodDay";
ss << flush;
ss >> str;
cout << str;
【问题讨论】:
-
如果您使用
std::endl或写入更多缓冲输出实际可以容纳的内容,则刷新是的。至于你关于检查内容的问题,可以看看std::ios_base::register_callback有用。 My answer here 也可能会给你一些见解。 -
那么,如果我不使用 std::endl 并且写入的内容不超过缓冲输出可以容纳的内容,那么当我使用 cout 时输出缓冲区是否仍会被刷新?感谢您的回复。
-
'当我使用 cout 时,输出缓冲区是否仍然被刷新?' 不...
-
为什么你需要知道 - 一个流可能没有缓冲(如果流超出范围,缓冲区的剩余内容将被刷新)
-
std::cout << "whatever" << std::flush;stackoverflow.com/a/14107357/425871
标签: c++ buffer output cout flush