函数
<ostream> <iostream>

std::flush

用于 ostream
ostream& flush (ostream& os);
基础模板
template <class charT, class traits>basic_ostream<charT,traits>& flush (basic_ostream<charT,traits>& os);
刷新流缓冲区
同步关联的流缓冲区与其控制的输出序列。

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

其行为等同于调用os的成员函数flush

存在同名且行为相同的成员函数(参见ostream::flush)。

参数

os
受影响的输出流对象。
由于此函数是操纵符,因此它设计为单独使用,不带参数,并与输出流的插入<<)操作结合使用(请参见下面的示例)。

返回值

参数 os

通过修改 os内部状态标志来发出错误信号。
flagerror
eofbit-
failbit如果 sentry 对象的构造失败,则可能设置此标志。
badbit同步操作失败(包括函数捕获了内部操作抛出的异常)。
设置时,流的完整性可能受到影响。
单个操作可能在 os 上设置多个标志。

如果操作设置了os内部状态标志,而该标志已通过其成员exceptions注册,则该函数将引发类型为ios_base::failure的异常。

示例

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

int main () {

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

  for (int n=0; n<100; n++)
    outfile << n << std::flush;

  outfile.close();

  return 0;
}

此程序请求刷新test.txt 100 次。

数据竞争

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

异常安全

基本保证:如果抛出异常,os 处于有效状态。
如果os的最终错误状态标志不是goodbitexceptions成员已设置为针对该状态进行抛出,则会引发类型为failure的异常。
内部操作引发的任何异常都会被函数捕获并处理,从而设置osbadbit。如果对os调用exceptionsbadbit已被设置,则函数将重新抛出捕获到的异常。

另见