C++ 中cout<<endl的实现

简介:


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


目录
相关文章
|
6月前
|
C++
C++系列-第1章顺序结构-3-输出类cout
C++系列-第1章顺序结构-3-输出类cout
C++的输入与输出:cin与cout
C++的输入与输出:cin与cout
|
C语言 iOS开发 C++
C++ 的cout格式化输出
在某些实际场景中,我们经常需要按照一定的格式输出数据,比如输出浮点数时保留 2 位小数,再比如以十六进制的形式输出整数,等等。 对于学过 C 语言的读者应该知道,当使用 printf() 函数输出数据时,可以通过设定一些合理的格式控制符,来达到以指定格式输出数据的目的。例如 %.2f 表示输出浮点数时保留 2 位小数,%#X 表示以十六进制、带 0X 前缀的方式输出整数。 关于 printf() 函数支持的格式控制符,更详细的讲解,可阅读《C语言数据输出大汇总》一节,这里不做详细赘述。 C++ 通常使用 cout 输出数据,和 printf() 函数相比,cout 实现格式化输出数据的方
136 0
C++(cout和printf的使用小结)
C++(cout和printf的使用小结)
|
Web App开发 编译器 C++
C++ 几行代码就能重载操作符模拟 cout<<123<<endl;
C++ 几行代码就能重载操作符模拟 cout<<123<<endl;
70 0
|
C++
C++ 重载操作符<<实现cout定位输出以及设置颜色:cout<<Goto(x,y)<<setC(color)<<123<<cr;
C++ 重载操作符<<实现cout定位输出以及设置颜色:cout<<Goto(x,y)<<setC(color)<<123<<cr;
241 0
|
编译器 C++
C++ 重载操作符 <<实现模拟输出语句: cout << endl;
C++ 重载操作符 <<实现模拟输出语句: cout << endl;
196 0
|
存储 C++
C++异常处理机制由浅入深, 以及函数调用汇编过程底层刨析. C++11智能指针底层模拟实现
C++异常处理机制由浅入深, 以及函数调用汇编过程底层刨析. C++11智能指针底层模拟实现
C++异常处理机制由浅入深, 以及函数调用汇编过程底层刨析. C++11智能指针底层模拟实现
|
存储 Linux C语言
生产者消费者模式保姆级教程 (阻塞队列解除耦合性) 一文帮你从C语言版本到C++ 版本, 从理论到实现 (一文足以)
生产者消费者模式保姆级教程 (阻塞队列解除耦合性) 一文帮你从C语言版本到C++ 版本, 从理论到实现 (一文足以)
生产者消费者模式保姆级教程 (阻塞队列解除耦合性) 一文帮你从C语言版本到C++ 版本, 从理论到实现 (一文足以)
|
设计模式 安全 定位技术
C++从面试常考实现特殊类到单例模式的实现
C++从面试常考实现特殊类到单例模式的实现
C++从面试常考实现特殊类到单例模式的实现