根据endl
的定义,用于插入换行符并刷新流。我记得如果插入新行,则缓冲区将自动刷新。如果是这样,为什么 endl
在插入新行后仍然需要刷新流。
答案 0 :(得分:8)
如果插入新行,则缓冲区将自动刷新
不一定,也不适用于所有流。 std::cout
(以及它向其发送数据的标准输出流)通常是行缓冲的,但不是通用的。例如,某些实现仅在输出到终端时才行缓冲 stdout,否则对其进行完全缓冲(例如,如果输出被重定向到管道)。
这仅适用于标准输出。其他流(如文件 I/O)几乎总是完全缓冲的,并且只有在填满或显式刷新缓冲区时才会刷新缓冲区。