C++ 中cout<<endl的实现

简介: 话说像下面的语句,应该大家都明白这是通过重载operator


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


相关文章
C++ 编译错误 error: ‘cout‘ was not declared in this scope (摄氏度与华氏度的转换)
C++ 编译错误 error: ‘cout‘ was not declared in this scope (摄氏度与华氏度的转换)
C++ 编译错误 error: ‘cout‘ was not declared in this scope (摄氏度与华氏度的转换)
|
6月前
|
安全 算法 编译器
【C++ 基础知识】进一步了解 C++ 中 操纵符std::endl 的原理
【C++ 基础知识】进一步了解 C++ 中 操纵符std::endl 的原理
276 0
|
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;
69 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;
195 0