C++ 中cout<<endl的实现

hengyunabc 2012-07-22


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


登录 后评论
下一篇
云栖号资讯小编
1856人浏览
2020-05-25
相关推荐
12.解释器模式
815人浏览
2014-09-05 00:55:00
优先级队列
559人浏览
2018-01-06 00:00:00
C++ STL速查手册笔记
1485人浏览
2017-11-07 19:28:00
队列的实现
669人浏览
2017-11-09 13:37:00
IO多路复用之epoll(二)
699人浏览
2018-04-24 08:47:10
IO多路复用之epoll(一)讲解
793人浏览
2018-04-24 08:47:49
C++ 中cout&lt;&lt;endl的实现
689人浏览
2012-07-22 22:36:35
IO多路复用之epoll(一)讲解
620人浏览
2018-03-08 09:13:00
为什么epoll会那么高效
567人浏览
2017-12-29 20:12:00
0
0
0
1147