话说像下面的语句,应该大家都明白这是通过重载operator <<函数来实现的。
cout<<123;
cout<<"ssss";
但是像
cout<<endl;
是怎样实现的?
起初猜想endl是一个class或者struct,再通过一个friend函数来实现的。
但是翻下stl的实现,原来endl是一个函数!
template<typename _CharT, typename _Traits>
inline basic_ostream<_CharT, _Traits>& endl(basic_ostream<_CharT, _Traits>& __os)
{
return flush(__os.put(__os.widen('\n')));
}
__ostream_type& operator<<(__ostream_type& (*__pf)(__ostream_type&))
{
return __pf(*this);
}
可见当cout<<endl时,都会调用一次flush函数,这个地方可以注意下。
从下面的代码也可以看出实现原理的一二。
cout.operator <<(endl);
本文探讨了C++中endl的实现方式,揭示了它实际上是一个用于输出流的函数,其作用是在输出流中插入换行符并刷新缓冲区。通过对STL源码的分析,我们了解到当使用cout<<endl时,会调用一次flush函数来确保所有缓冲的数据被写入到输出设备。
3008

被折叠的 条评论
为什么被折叠?



