为什么有些示例使用 "endl" 而不是“\n”?

Why some examples are using "endl" instead of "\n"?

为什么有些示例使用“endl”而不是“\n”?

听说“endl”的处理时间比“\n”长,因为“endl”有一些刷新过程。

但是,网上有很多使用“endl”的例子。

我想知道他们为什么使用被认为效率低下的“endl”。

不好意思英语不好......谢谢

通常,直接使用 std::cout 并不适用于生产代码,在生产代码中通常更喜欢使用某种日志记录工具(用于写入文件而不是标准流等)。在这样的日志库中,你会希望只在需要时才刷新,但对于一些临时的、类似调试的输出,std::endl 的性能影响并不重要,更重要的是立即查看所需的输出。

  1. 很多人认为<< std::endl is different from << '\n' << std::flush,因为它会插入右端线标记。
    obviously nonsense.

  2. 其他人不理解std::cin and std::cout are tied together,所以前者想读时后者被刷新

  3. 还有一些人从未听说过 std::cerr,因此误将日志记录到 std::cout
    如果您使用了错误的工具,用大棒让它按照您的意愿行事,而不是后退一步并意识到您需要的是锤子而不是螺丝刀,这种情况很常见。

  4. 如果你真的想要,可能是因为你的程序特别不稳定,而且你是通过反复试验来编程的(这使得你的代码不太可能真的是正确的,而不仅仅是 似乎 到最后“工作”),你可以很容易地 make std::cout unbuffered too.
    无需养成更多坏习惯。

     std::cout << std::unitbuf;