【问题标题】:Is the output buffer automatically flushed when cout is used?使用 cout 时是否会自动刷新输出缓冲区?
【发布时间】: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 &lt;&lt; "whatever" &lt;&lt; std::flush;stackoverflow.com/a/14107357/425871

标签: c++ buffer output cout flush


【解决方案1】:

stringstream 不应该在刷新时丢失其内容。实际上,flush 操纵器对 stringstream 没有任何意义,因为任何输入都会立即写入由 stringstream 包装的缓冲区。这就是为什么您仍然会看到“GoodDay”。

【讨论】:

    猜你喜欢
    • 2011-12-03
    • 2020-04-06
    • 2018-07-03
    • 2018-04-17
    • 2017-07-14
    • 2011-08-26
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多