std :: endl不是多余的吗?

时间:2015-08-30 22:41:20

标签: c++ endl

在以下情况下会发生冲洗:

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

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

2 个答案:

答案 0 :(得分:11)

  

的std :: CERR

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

  

给std :: cin

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

  

程序终止

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

  

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

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

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

答案 1 :(得分:4)

  

所以在大多数常规程序中,std::endl基本上是不必要的,但几乎在所有地方都使用它。

不,它不是冗余,因为标准不强制执行'\n'的刷新。这只是一个特定于实现的行为,而std::endl的行为总是被明确定义。