2016-03-25 230 views
4

我是一个新手到编程,我开始昨天自学,我已经得到的一切,但我坦率地说,不明白没有人解释std :: cout << x;和std :: cout << x << std :: endl;?

std::cout << x; 

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

之间的区别这对我来说,我要求保持安全。

+0

对于[进一步阅读](http://stackoverflow.com/q/213907/5583153) – Nacho

+0

[这是我的回答](http://stackoverflow.com/a/29701830/1938163)也可能有助于理解潜力影响 –

回答

11

endl在流中写入新行,所以后面的输出将出现在下一行。它也刷新流的缓冲区,通常为causing a slow-down

这种冲水意味着99%的时间,endl是一个错误,你应该只写"\n"(或'\n')。当你真的要刷新流,我觉得这是更好地做出明确的通过调用std::flush代替:

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

至于运行时的动作推移,这相当于用std::endl,但在以下方面使你的意图明确,这是显着优越。

+5

只是一个观察,可能会帮助一些读者:如果你想输出某种提示方式,比如'std :: cout <<“,输入你的名字:”;',你不需要使用'endl'或'flush',然后再尝试从'std :: cin'输入,因为它们是“绑定”流并自动处理。 –

0

std::endl向流中添加换行代码并刷新输出缓冲区,std::cout << x只是打印x。 所以,如果你有一个代码

cout << 5; 
cout << 5; 

这将是

为输出,但如果添加一个endl第一cout输出将是

我真的建议你是用'\n'它比ENDL好过得多。

+0

“我真的建议你使用'\ n'它比endl好得多” 更好的是什么?性能?还有什么? – KABoissonneault

+0

性能还不够吗? –

+0

当我得到它是免费的,这是很好的。如果可以引入其他问题,我宁愿避免它。尽管说实话,我个人使用'printf'来封装日志而不是流 – KABoissonneault

相关问题