"endl"和"\n"的区别

10

可能有重复:
C++:“std::endl”和“\n”的区别

我想知道使用这两种换行方式是否有任何显著的区别:

cout << endl;  //approach1
cout << "\n";  //approach2

有什么实际的区别吗?


3
可能是重复问题:https://dev59.com/rnVC5IYBdhLWcg3wsTRi - Bill Cheatham
很少有实际区别。除了 endl 会刷新流之外。除非你绝对需要刷新流,否则你可以使用它们中的任何一个。 - Daniel Lidström
4
如果与用户有互动,使用std::endl。但如果只是在创建离线文件之类的情况下,则优先使用'\n'。 - Martin York
1个回答

24

是的,它们是不同的。

"\n" 只是一个长度为1的字符串,会被附加到标准输出流中。

std::endl 是一个对象,它会导致在输出流中附加换行符("\n") 并刷新标准输出缓冲区。因此,它需要更多的处理。


1
实际上,它可以是不同的,但并不一定。大多数控制台都是行缓冲的,这意味着无论您是否显式刷新,它们都会在换行时被刷新。 - Billy ONeal
3
ostream也有自己的缓冲区,所以控制台是行缓冲并不是唯一的因素。如果ostream在将'\n'放入其缓冲区后不进行刷新,则控制台永远看不到换行符。 - Johannes Schaub - litb
1
【吹毛求疵模式开启】 '\n' 是一个字符,而 "\n" 则是长度为1的字符串。在某些情况下,将字符写入缓冲区可能会更快。【吹毛求疵模式关闭】 - watson1180
3
在我上一份工作中,数年前的某个时候(写入一个大型文本文件),我们有一个场合,在每行结尾使用换行符“endl”和使用“\n”之间切换,这样做产生了非常明显的影响——从保存时的约2秒暂停到没有用户可察觉的暂停。 - Caleb Huitt - cjhuitt
1
@BillyOneal:不,就C++而言,底层流并不存在。 - Lightness Races in Orbit
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接