std::cout<< x ; 和 std::cout<<x<<std::endl; 有什么区别?

4

我是一名编程新手,昨天开始自学,我已经掌握了很多东西,但说实话,我不太理解以下两者之间的区别:

std::cout << x;

并且

std::cout << x << std::endl;

没有人向我解释过这个,我希望保险起见问一下。

请参考更多阅读 - Nacho
我的这个回答(https://dev59.com/uV0b5IYBdhLWcg3wA9LI#29701830)也可能有助于理解潜在的影响。 - Marco A.
2个回答

12

endl写入一个换行符到流中,所以随后的输出将出现在下一行。它还会刷新流的缓冲区,通常会导致速度变慢

这种刷新意味着99%的情况下,endl都是一个错误,你应该只写"\n"(或'\n')而不是使用endl。当你真正需要刷新流时,我认为更好的做法是显式地调用std::flush

std::cout << x << '\n' << std::flush;

就运行时操作而言,这与使用std::endl等效,但在表明您的意图方面,它要明显得多


5
这是一个可能会帮助一些读者的观察:如果你想输出某种提示,比如std::cout << "type your name:";,在尝试从std::cin获取输入之前,默认情况下不需要使用endlflush,因为它们是"绑定"流并自动处理。 - Tony Delroy

0

std::endl会向流中添加一个换行符,并刷新输出缓冲区,而std::cout << x只是打印x。 因此,如果你得到了一段代码

cout << 5;
cout << 5;

它将会是

55

作为输出,但如果您在第一个cout中添加endl,输出将为

5

5

我真正推荐的是使用'\n',它比endl更好。


我非常推荐你使用 '\n',它比 endl 更好。更好在哪里?性能上?还有什么其他方面? - KABoissonneault
当我免费获得它时,这很好。如果它会引入其他问题,我宁愿避免它。虽然说实话,我个人使用printf的包装器来记录日志,而不是流。 - KABoissonneault

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