Home Articles

std :: endl不是多余的吗?

Asked
Viewed 1697 times
-3

在以下情况下发生冲洗:

  • std :: cerr

  • std :: cin

  • 程序终止

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

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

2 Answers

  • 11

    std :: cerr

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

    std :: cin

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

    程序终止

    如上所述,如果我想在程序完成之前告诉用户什么?

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

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

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

  • 4

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

    不,它不是多余的,因为沿着 '\n' 执行刷新只是一个特定于实现的行为,而 std::endl 的行为总是被明确定义 .

Related