Som*_*ude 90 c++ string character
自从我std::endl在写作时停止使用结束行std::cout并开始使用以来已经很多年了"\n".
但现在我开始看到更多的代码片段'\n',我开始想知道什么是最好的.
除了显而易见的是一个字符串,另一个字符,使用它有任何好处:
std::cout << variable << '\n';
Run Code Online (Sandbox Code Playgroud)
在此:
std::cout << variable << "\n";
Run Code Online (Sandbox Code Playgroud)
迟到:
当我问这个问题时,我似乎认为换行'\n'刷新了缓冲区.现在我知道这取决于.
默认情况下std::cin,绑定到旧的C stdin FILE*流,并std::cout绑定到stdout.新线上的冲洗来自这种搭售.默认情况下stdout,如果连接到终端,则进行行缓冲.这意味着新行将刷新其缓冲区.因此,当使用打印换行符std::cout时,将导致stdout刷新.
如果stdout未连接到的终端(例如,输出已经被重定向或用管道输送),或者如果之间的联系std::cout和stdout被打破,则换行符将不刷新任何东西.
sbi*_*sbi 101
实际上,'\n'应该是默认值.除非您还要显式刷新流(以及何时以及为什么要这样做?),否则根本不需要使用std::endl.1
当然,许多书籍和教程std::endl都是默认使用的.这是不幸的,可能导致严重的性能错误.
我认为使用'\n'或使用之间没有什么区别"\n",但后者是一个(两个)字符数组,必须逐字符打印,必须设置一个循环,这比输出单个字符更复杂.当然,在执行IO时,这很少重要,但如果有疑问,当您想输出一个字符文字时,输出一个字符文字,而不是整个字符串文字.
这样做的一个很好的副作用是你在代码中传达你打算只输出一个字符,而不是偶然地做到这一点.
1 注意默认std::cout绑定std::cin,这导致std::cout在任何输入操作之前刷新,以便在用户输入内容之前打印任何提示.
BЈо*_*вић 14
没有最好的.你用你需要的东西:
std::endl - 结束线路并冲洗流jal*_*alf 14
他们做不同的事情."\n"输出换行符(在适当的平台特定表示中,因此它"\r\n"在Windows上生成),但std::endl执行相同操作并刷新流.通常,您不需要立即刷新流,这只会让您的性能降低,因此大多数情况下都没有理由使用std::endl.