为什么有些示例使用 "endl" 而不是“\n”?
Why some examples are using "endl" instead of "\n"?
为什么有些示例使用“endl”而不是“\n”?
听说“endl”的处理时间比“\n”长,因为“endl”有一些刷新过程。
但是,网上有很多使用“endl”的例子。
我想知道他们为什么使用被认为效率低下的“endl”。
不好意思英语不好......谢谢
通常,直接使用 std::cout
并不适用于生产代码,在生产代码中通常更喜欢使用某种日志记录工具(用于写入文件而不是标准流等)。在这样的日志库中,你会希望只在需要时才刷新,但对于一些临时的、类似调试的输出,std::endl
的性能影响并不重要,更重要的是立即查看所需的输出。
很多人认为<< std::endl
is different from << '\n' << std::flush
,因为它会插入右端线标记。
即obviously nonsense.
其他人不理解std::cin
and std::cout
are tied together,所以前者想读时后者被刷新
还有一些人从未听说过 std::cerr
,因此误将日志记录到 std::cout
。
如果您使用了错误的工具,用大棒让它按照您的意愿行事,而不是后退一步并意识到您需要的是锤子而不是螺丝刀,这种情况很常见。
如果你真的想要,可能是因为你的程序特别不稳定,而且你是通过反复试验来编程的(这使得你的代码不太可能真的是正确的,而不仅仅是 似乎 到最后“工作”),你可以很容易地 make std::cout
unbuffered too.
无需养成更多坏习惯。
std::cout << std::unitbuf;
为什么有些示例使用“endl”而不是“\n”?
听说“endl”的处理时间比“\n”长,因为“endl”有一些刷新过程。
但是,网上有很多使用“endl”的例子。
我想知道他们为什么使用被认为效率低下的“endl”。
不好意思英语不好......谢谢
通常,直接使用 std::cout
并不适用于生产代码,在生产代码中通常更喜欢使用某种日志记录工具(用于写入文件而不是标准流等)。在这样的日志库中,你会希望只在需要时才刷新,但对于一些临时的、类似调试的输出,std::endl
的性能影响并不重要,更重要的是立即查看所需的输出。
很多人认为
<< std::endl
is different from<< '\n' << std::flush
,因为它会插入右端线标记。
即obviously nonsense.其他人不理解
std::cin
andstd::cout
are tied together,所以前者想读时后者被刷新还有一些人从未听说过
std::cerr
,因此误将日志记录到std::cout
。
如果您使用了错误的工具,用大棒让它按照您的意愿行事,而不是后退一步并意识到您需要的是锤子而不是螺丝刀,这种情况很常见。如果你真的想要,可能是因为你的程序特别不稳定,而且你是通过反复试验来编程的(这使得你的代码不太可能真的是正确的,而不仅仅是 似乎 到最后“工作”),你可以很容易地 make
std::cout
unbuffered too.
无需养成更多坏习惯。std::cout << std::unitbuf;