cjc*_*rie 15 c++ buffer fstream stream ostream
我正在阅读关于I/O的cplusplus.com教程.最后,它说fstream缓冲区与光盘上的文件同步
明确地,使用操纵器:当在流上使用某些操纵器时,会发生显式同步.这些操纵器是:flush和endl.
和
显式地,使用成员函数sync():调用流的成员函数sync(),它不带参数,导致立即同步.如果流没有关联的缓冲区或者出现故障,则此函数返回一个等于-1的int值.否则(如果流缓冲区已成功同步),则返回0.
除了一些其他隐式案例(例如destroy和stream.close())
在我的代码中,我总是使用flush().
有关std :: flush()的文档:
刷新流缓冲区
将与流关联的缓冲区同步到其受控输出序列.这实际上意味着缓冲区中的所有未写入字符都会尽快写入其受控输出序列("刷新").
有关std :: streambuf :: sync()的文档:
将输入缓冲区与字符源同步
调用它来使流缓冲区与受控序列同步(就像文件流中的文件一样).公共成员函数pubsync调用此受保护的成员函数来执行此操作.
如果这是一个新手问题,请原谅我; 我是个菜鸟.
Age*_*ien 15
basic_ostream :: flush 这是一个非虚函数,它将未经修改的更改写入底层缓冲区.如果出现错误,它会在使用的流对象中设置错误标志.这是因为返回值是对流本身的引用,以允许链接.
basic_filebuf :: sync 这是一个虚函数,它将所有挂起的更改写入基础文件,并返回错误代码以指示成功或失败.
endl
当应用于a时ostream,它'\n'会向流写入,然后调用flush该流.
因此,实质上:flush对于任何流来说都是更通用的函数,而sync显式绑定到文件.flush是非虚拟的,而是sync虚拟的.这改变了在继承的情况下如何通过指针(到基类)使用它们.此外,他们报告错误的方式不同.