0

有人可以解释一下,这到底是什么意思?我试图了解和之间有什么区别clogcerr区别仅在于缓冲提前谢谢

4

2 回答 2

2

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

使用 cerr,这不会发生。

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

可以合理地想象写入 cerr 的内容可能需要立即采取行动,但写入 clog 的内容则不需要,因此存在差异。

于 2010-09-30T11:44:34.157 回答
1

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

于 2010-09-30T11:44:55.717 回答