【问题标题】:Is it necessary for endl to flush buffer?endl 是否需要刷新缓冲区?
【发布时间】:2021-10-01 20:32:40
【问题描述】:

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

【问题讨论】:

  • 水是湿的基本原因是一样的:C++ 标准是这么说的。
  • o o, "如果插入新行,则缓冲区将自动刷新" --> common。你确定它是 C++ 指定的吗?
  • @chux - 恢复 Monica 我认为是因为 c 可以
  • 当您不想花时间刷新流时,您会发现一个常见的技巧是输出换行符而不是使用endl。这是一个常见的技巧,因为大多数时候它都有效。通常只有发送到用户终端的数据才会在换行符上自动刷新,这是由实现做出的决定。
  • 您可能会发现 thisthis 有趣的读物。

标签: c++ flush


【解决方案1】:

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

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

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

【讨论】:

  • 而且,需要明确的是,刷新输出缓冲区很少有用,而且通常是性能杀手。对于控制台输出并没有太大区别,但对于文件 I/O,除非您知道自己在做什么,否则不要乱用缓冲。
猜你喜欢
  • 1970-01-01
  • 2012-03-27
  • 1970-01-01
  • 2012-02-29
  • 2017-07-14
  • 2018-07-03
  • 1970-01-01
  • 2012-08-13
相关资源
最近更新 更多