endl 是否有必要刷新缓冲区?

o o*_*o o 0 c++ flush

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

Mil*_*nek 8

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

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

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