【问题标题】:Difference between endl and '\n' [duplicate]endl 和 '\n' 之间的区别 [重复]
【发布时间】:2012-11-12 19:28:08
【问题描述】:

可能重复:
C++: “std::endl” vs “\n”

我测试了一个简单的程序,我意识到endl 对我的程序造成了严重破坏。使用 endl,我的程序在使用 '\n' 时运行了 100+ ms,时间下降到 ~50ms。 谁能说出为什么会有这样的差异?

附:我确实读过其他帖子,它们以某种方式解释了他们每个人在做什么,但是std::flush 真的需要这么多时间吗?
或者还有其他可能的解释吗?

【问题讨论】:

  • endl 也会刷新缓冲区。

标签: c++ stream outputstream


【解决方案1】:

std::endl 写入一个换行符,并刷新缓冲区。正如您所发现的,刷新可能是一项相当昂贵的操作。

【讨论】:

  • 这东西能把执行时间加倍,我觉得挺奇怪的。谢谢
  • @BujancaMihai:如果您有疑问,请比较以下时间:(1)endl; (2)\n; (3) \n 后跟flush
  • 毫无疑问,我已经尝试过了,区别很明显。我知道flushing 发生了,但并不知道这是一个如此昂贵的操作。非常感谢
  • @BujancaMihai:可能刷新的成本取决于您要刷新多少东西,因此很难预测操作的成本。
【解决方案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.

【讨论】:

    猜你喜欢
    • 2011-05-29
    • 2015-11-07
    • 2013-08-16
    • 1970-01-01
    • 2017-03-04
    • 2021-01-22
    • 1970-01-01
    • 2014-08-16
    相关资源
    最近更新 更多