public member function
<ostream> <iostream>

std::basic_ostream::flush

basic_ostream& flush();
刷新输出流缓冲区
使关联的*流缓冲区*与其控制的输出序列同步。

对于实现中间缓冲区的*流缓冲区*对象,此函数会请求将所有字符写入受控序列。

内部,该函数通过首先构造一个sentry对象来访问输出序列。然后(如果*good*),它在其关联的*流缓冲区*对象上调用*pubsync*,最后在返回前销毁*sentry*对象。

存在一个同名同行为的操作符(参见flush)。

参数



返回值

basic_ostream 对象(*this)。

错误通过修改*内部状态标志*来报告
标志错误
eofbit-
failbit如果 sentry 的构造失败,则可能设置此标志。
badbit同步操作失败(包括函数捕获了内部操作抛出的异常)。
当设置时,流的完整性可能已受到影响。
一次操作可能设置多个标志。

如果操作设置了一个已注册到成员exceptions的*内部状态标志*,则函数将抛出一个成员类型为failure的异常。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Flushing files
#include <fstream>      // std::ofstream

int main () {

  std::ofstream outfile ("test.txt");

  for (int n=0; n<100; ++n)
  {
    outfile << n;
    outfile.flush();
  }
  outfile.close();

  return 0;
}

此示例尝试更新文件test.txt的内容100次。

数据竞争

修改流对象。
同时访问同一个流对象可能会导致数据竞争,但标准流对象(coutcerrclogwcoutwcerrwclog)在*与stdio同步*时除外(在这种情况下,不会发生数据竞争,尽管不保证来自多个线程的字符插入顺序)。

异常安全

基本保证:如果抛出异常,对象处于有效状态。
如果最终的*错误状态标志*不是goodbit且已设置成员exceptions以针对该状态抛出,则此函数将抛出成员类型为failure的异常。
任何由内部操作抛出的异常都会被函数捕获并处理,设置badbit。如果上次调用exceptions时设置了badbit,则函数将重新抛出捕获的异常。

另见