C++ 中cout<<endl的实现

横云断岭 2012-07-22

函数 c++ os class PUT


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


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