话说像下面的语句,应该大家都明白这是通过重载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);