有人能解释一下吗,这到底是什么意思?我在试着理解clog和cerr的区别,区别只在于提前谢谢的缓冲
发布于 2010-09-30 19:44:34
当你写到clog的时候,你实际上是在写一个内存中的字符存储。当这个存储区变满时,它就会写入实际的流。当流关闭时(这将在程序结束时发生),那么任何剩余的数据都会写入流中(也可以进行手动刷新)。
有了cerr,这种情况就不会发生。
通常,由于写入内存的速度比写入大多数流的速度快,因此缓冲的效果是整体性能的提高。情况并不总是如此(典型的例子是,间接性级别导致缓冲区写入缓冲区写入缓冲区),但这通常足以使其成为合理的默认值。然而,结果是在正被写入的流对象和正被写入的实际流之间可能存在延迟,这在某些情况下是不适当的。
可以合理地想象,写入cerr的某些内容可能需要立即操作,而写入clog的某些内容则不需要,这就是不同之处。
发布于 2010-09-30 19:44:56
clog和cerr之间的不同之处在于,clog是完全缓冲的,而cerr的输出在每次格式化后写入外部设备。使用完全缓冲的流时,仅当缓冲区已满时才写入实际外部设备的输出。因此,clog对于将输出重定向到文件更有效,而cerr主要用于终端I/O。在每次格式化之后写入外部设备,在cerr的情况下写入到终端,用于同步到终端的输出和来自终端的输入。此外,预定义的流与其关联的C标准文件同步。
https://stackoverflow.com/questions/3830106
复制相似问题