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