C++ 中cout<<endl的实现

本文探讨了C++中endl的实现方式,揭示了它实际上是一个用于输出流的函数,其作用是在输出流中插入换行符并刷新缓冲区。通过对STL源码的分析,我们了解到当使用cout&lt;&lt;endl时,会调用一次flush函数来确保所有缓冲的数据被写入到输出设备。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值