-3

在以下情况下会发生刷新:

  • 标准::cerr
  • 标准::cin
  • 程序终止
  • 在许多实现中,标准输出是行缓冲的,这意味着“\n”无论如何都会刷新

所以似乎在大多数常规程序中,std::endl 基本上是不必要的,但它几乎无处不在。

4

2 回答 2

11

标准::cerr

但是,如果我不想写到 stderr 而是写到 stdout 怎么办?

标准::cin

但是如果我只想给用户一些状态更新而不想要任何输入怎么办?

程序终止

如上所述,如果我想在程序完成之前告诉用户一些事情怎么办?

在许多实现中,标准输出是行缓冲的,这意味着“\n”无论如何都会刷新

但是那些没有的平台呢?无论当前是否存在这样的平台,我都希望我的代码按照标准定义的方式工作,而不是“meh,可能在所有实现上都可以”。

如果以上所有都适用(第四点实际上总是适用),您需要“手动”冲洗。如果同花由前三个中的一个处理,你不会。

于 2015-08-30T22:46:51.367 回答
4

所以它似乎在大多数常规程序中,std::endl基本上是不必要的,但它几乎无处不在。

不,这不是多余'\n'的,因为标准没有强制实施冲洗。这只是一个特定于实现的行为,而std::endl总是明确定义的行为。

于 2015-08-30T22:48:22.813 回答