endl 是否需要刷新缓冲区?

Is it necessary for endl to flush buffer?

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

if a new line is inserted, then the buffer will be flushed automatically

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

这只是标准输出。文件 I/O 等其他流几乎总是完全缓冲的,缓冲区只有在填满或显式刷新时才会刷新。