可能是重复问题:
C++:“std::endl”与“\n”
我有一个简单的程序,测试后发现使用endl
会破坏我的程序。使用endl时,我的程序运行100+毫秒,而使用'\n'
,时间降至~50ms。
有人能告诉我为什么会有这样的差异吗?
P.S. 我确实阅读了其他帖子,解释了它们各自在做什么,但是std::flush
真的需要这么长时间吗?
或者还有另一个可能的解释吗?
可能是重复问题:
C++:“std::endl”与“\n”
我有一个简单的程序,测试后发现使用endl
会破坏我的程序。使用endl时,我的程序运行100+毫秒,而使用'\n'
,时间降至~50ms。
有人能告诉我为什么会有这样的差异吗?
P.S. 我确实阅读了其他帖子,解释了它们各自在做什么,但是std::flush
真的需要这么长时间吗?
或者还有另一个可能的解释吗?
std::endl
会写入一个换行符,并刷新缓冲区。如您所发现的那样,刷新操作可能会非常耗费时间。
endl
;(2)\n
;(3)\n
后面跟着flush
。 - NPEflushing
会发生,但不知道它是如此昂贵的操作。非常感谢。 - Mihai Bujancaendl
有额外昂贵的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.