std::endl 不是多余的吗?

Isn't std::endl redundant?

本文关键字:多余 endl std      更新时间:2023-10-16

在以下情况下会发生Flush:

  • std:: cerr
  • std:: cin
  • 程序终止
  • 在许多实现中,标准输出是行缓冲的,这意味着"n"无论如何都会刷新
因此,在大多数常规程序中,std::endl基本上是不必要的,但它几乎无处不在。

std:: cerr

但是如果我不想写stderr,而是stdout呢?

std:: cin

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

程序终止

与上面一样,如果我想在程序完成之前告诉用户一些内容,该怎么办?

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

但是那些不这样做的平台呢?无论目前是否存在这样的平台,我都希望我的代码按照标准定义的方式工作,而不是"嗯,可能在所有实现上都很好"。

如果上述所有条件都适用(第四点实际上总是适用),则需要"手动"冲洗。

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

不,它不是冗余的,因为沿着'n'的冲洗的实现并没有被标准强制要求。这只是一个实现特定的行为,而std::endl的行为总是明确定义的。