endl 是否需要刷新缓冲区?

时间:2021-07-25 16:59:05

标签: c++ flush

根据endl的定义,用于插入换行符并刷新流。我记得如果插入新行,则缓冲区将自动刷新。如果是这样,为什么 endl 在插入新行后仍然需要刷新流。

1 个答案:

答案 0 :(得分:8)

<块引用>

如果插入新行,则缓冲区将自动刷新

不一定,也不适用于所有流。 std::cout(以及它向其发送数据的标准输出流)通常是行缓冲的,但不是通用的。例如,某些实现仅在输出到终端时才行缓冲 stdout,否则对其进行完全缓冲(例如,如果输出被重定向到管道)。

这仅适用于标准输出。其他流(如文件 I/O)几乎总是完全缓冲的,并且只有在填满或显式刷新缓冲区时才会刷新缓冲区。