std::endl不是多余的吗?
Isn't std::endl redundant?
Flush发生在以下情况:
- std::cerr
- std::cin
- 程序终止
- 在许多实现中,标准输出是行缓冲的,这意味着“\n”无论如何都会刷新
所以在大多数常规程序中,std::endl基本上是不必要的,但几乎无处不在。
std::cerr
但是,如果我不想写入 stderr,而是写入 stdout 怎么办?
std::cin
但是如果我只想给用户一些状态更新而不需要任何输入怎么办?
program termination
如上,如果我想在程序完成之前告诉用户一些事情怎么办?
in many implementations, standard output is line-buffered, meaning "\n" flushes anyway
但是那些没有的平台呢?无论当前是否存在这样的平台,我都希望我的代码按照标准定义的方式工作,而不是 "meh, will probably be fine on all implementations".
如果以上都适用(第四点实际上总是适用),则需要冲洗"by hand"。如果同花顺由前三个中的一个处理,则您不需要。
So it seems in most regular programs, std::endl
is basically unnecessary, but it's used almost everywhere.
不,这不是冗余,因为标准并未强制要求沿 '\n'
执行刷新。这只是一个特定于实现的行为,而 std::endl
的行为总是明确定义的。
Flush发生在以下情况:
- std::cerr
- std::cin
- 程序终止
- 在许多实现中,标准输出是行缓冲的,这意味着“\n”无论如何都会刷新
所以在大多数常规程序中,std::endl基本上是不必要的,但几乎无处不在。
std::cerr
但是,如果我不想写入 stderr,而是写入 stdout 怎么办?
std::cin
但是如果我只想给用户一些状态更新而不需要任何输入怎么办?
program termination
如上,如果我想在程序完成之前告诉用户一些事情怎么办?
in many implementations, standard output is line-buffered, meaning "\n" flushes anyway
但是那些没有的平台呢?无论当前是否存在这样的平台,我都希望我的代码按照标准定义的方式工作,而不是 "meh, will probably be fine on all implementations".
如果以上都适用(第四点实际上总是适用),则需要冲洗"by hand"。如果同花顺由前三个中的一个处理,则您不需要。
So it seems in most regular programs,
std::endl
is basically unnecessary, but it's used almost everywhere.
不,这不是冗余,因为标准并未强制要求沿 '\n'
执行刷新。这只是一个特定于实现的行为,而 std::endl
的行为总是明确定义的。