IO对象的缓冲区的刷新指的是什么?其作用是什么?看了《C++ primer 4th》里的解释如下:
“Each IO object manages a buffer, which is used to hold the data that the program reads and writes. When we write
os << "please enter a value: ";
the literal string is stored in the buffer associated with the stream os. There are several conditions that cause the buffer to be flushed, that is, written to the actual output device or file:……”
难道只是将缓冲区的内容输出出来么?开始我以为是清空缓冲区内的数据,但好像又不是。由于istream和fstream里定义的IO对象都抓取不到其缓冲区的内容。下面我用sstream里定义的IO对象实验了一下:
# include <sstream>
# include <iostream>
using namespace std;
void main()
{
ostringstream o_stream;
for (int ival,i(0); i!=3; ++i) {
o_stream << "Hello " << flush;
}
cout << o_stream.str() << endl;
}
实验的结果看到的是这个:
Hello Hello Hello 
也就是说flush操控符刷新了o_stream的缓冲区,但却没清除里面的数据。那刷新缓冲区的作用是什么?可以举出一个缓冲区不刷新而导致结果有误的实例么?
求高手解答,感激不尽……

解决方案 »

  1.   

    flush一般都是把内存中的数据刷到磁盘之类的介质上吧
      

  2.   

    (转)什么是缓冲区  缓冲区又称为缓存,它是内存空间的一部门。也就是说,在内存空间中预留了必然的存储空间,这些存储空间用来缓冲输入或输出的数据,这部门预留的空间就叫做缓冲区。  缓冲区按照其对应的是输入设备仍是输出设备,分为输入缓冲区和输出缓冲区。  好比我们从磁盘里守信息,我们先把读出的数据放在缓冲区,计较机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中篡夺,这样就可以削减磁盘的读写次数,再加上计较机对缓冲区的操作大大快于对磁盘的操作,故应用缓冲区可大大提高计较机的运行速度。  缓冲区的类型  缓冲区 分为三种类型:全缓冲、行缓冲和不带缓冲。  1、全缓冲  在这种情形下,当填满尺度I/O缓存后才进行现实I/O操作。全缓冲的典型代表是对磁盘文件的读写。  2、行缓冲  在这种情形下,当在输入和输出中碰着换行符时,执行真正的I/O操作。这时,我们输入的字符先存放在缓冲区,等按下回车键换行时才进行现实的I/O操作。典型代表是键盘输入数据。  3、不带缓冲  也就是一直行缓冲,尺度犯错情形stderr是典型代表,这使得犯错信息可以直接尽快地显示出来  缓冲区的刷新
      下列情形会激发缓冲区的刷新:
      1、缓冲区满时;
      2、执行flush语句;
      3、执行endl语句;
      4、封锁文件。
      可见,缓冲区满或封锁文件时城市刷新缓冲区,进行真正的I/O操作。此外,在C++中,我们可以使用flush函数来刷新缓冲区(执行I/O操作并清空缓冲区),如:
      cout<<flush; //将显存的内容当即输出到显示器长进行显示
      endl节制符的浸染是将光标移动到输出设备中下一行开首处,而且清空缓冲区。
      cout<<endl;
      相当于
      cout<<”\n” <<flush
      

  3.   

    很详细flush 看来没有删除功能