在以下情况下会发生刷新:
- 标准::cerr
- 标准::cin
- 程序终止
- 在许多实现中,标准输出是行缓冲的,这意味着“\n”无论如何都会刷新
所以似乎在大多数常规程序中,std::endl 基本上是不必要的,但它几乎无处不在。
标准::cerr
但是,如果我不想写到 stderr 而是写到 stdout 怎么办?
标准::cin
但是如果我只想给用户一些状态更新而不想要任何输入怎么办?
程序终止
如上所述,如果我想在程序完成之前告诉用户一些事情怎么办?
在许多实现中,标准输出是行缓冲的,这意味着“\n”无论如何都会刷新
但是那些没有的平台呢?无论当前是否存在这样的平台,我都希望我的代码按照标准定义的方式工作,而不是“meh,可能在所有实现上都可以”。
如果以上所有都适用(第四点实际上总是适用),您需要“手动”冲洗。如果同花由前三个中的一个处理,你不会。
所以它似乎在大多数常规程序中,
std::endl
基本上是不必要的,但它几乎无处不在。
不,这不是多余'\n'
的,因为标准没有强制实施冲洗。这只是一个特定于实现的行为,而std::endl
总是明确定义的行为。