在iostream中缓冲

时间:2010-09-30 11:28:57

标签: c++ buffering

有人可以解释一下,究竟是什么意思?我试图理解clogcerr之间的区别是什么,区别仅在于缓冲 提前谢谢

2 个答案:

答案 0 :(得分:2)

当您写入clog时,您实际上会写入内存中的字符存储。当这个商店变满时,它会写入实际的流。当流关闭时(将在程序结束时发生),然后将任何剩余数据写入流中(也可能发生手动刷新)。

使用cerr,这不会发生。

通常,由于写入内存比写入大多数流更快,因此缓冲的效果是性能的整体提升。情况并非总是如此(一个典型的例子是间接级别导致缓冲区写入缓冲区写缓冲区),但这通常足以成为合理的默认值。但结果是在写入的流对象和正在写入的实际流之间可能存在延迟,这在某些情况下是不合适的。

有理由认为写给cerr的东西可能需要迅速行动,但是写入clog的东西不会,因此不同。

答案 1 :(得分:1)

clog和cerr之间的区别在于clog是完全缓冲的,而在每次格式化之后,输出到cerr会写入外部设备。使用完全缓冲的流,仅在缓冲区已满时才会写入到实际外部设备的输出。因此,clog对于将输出重定向到文件更有效,而cerr主要用于终端I / O.在每次格式化之后写入外部设备,在cerr的情况下写入终端,用于将输出同步到终端并从终端输入。此外,预定义的流与其关联的C标准文件同步。