endl和'\n'的区别

4

可能是重复问题:
C++:“std::endl”与“\n”

我有一个简单的程序,测试后发现使用endl会破坏我的程序。使用endl时,我的程序运行100+毫秒,而使用'\n',时间降至~50ms。 有人能告诉我为什么会有这样的差异吗?

P.S. 我确实阅读了其他帖子,解释了它们各自在做什么,但是std::flush真的需要这么长时间吗?
或者还有另一个可能的解释吗?


3
endl 也会刷新缓冲区。 - Duck
2个回答

6

std::endl会写入一个换行符,并刷新缓冲区。如您所发现的那样,刷新操作可能会非常耗费时间。


对我来说,这件事能够使执行时间翻倍是相当奇怪的。谢谢。 - Mihai Bujanca
如果你有疑问,可以比较以下三种情况的时间:(1)endl;(2)\n;(3)\n后面跟着flush - NPE
毫无疑问,我已经尝试过了,差异是显而易见的。我知道flushing会发生,但不知道它是如此昂贵的操作。非常感谢。 - Mihai Bujanca
@BujancaMihai:也许冲洗的成本取决于需要冲洗的物品数量,因此很难预测操作的费用会有多贵。 - effeffe

2

endl有额外昂贵的flush()操作

27.7.3.8标准basic_ostream操作符[ostream.manip]

namespace std {
template <class charT, class traits>
basic_ostream<charT,traits>& endl(basic_ostream<charT,traits>& os);
}
1 Effects: Calls os.put(os.widen(’\n’)), then os.flush().
2 Returns: os.

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