C++ endl 详解
我们在最初学习C++语言时就接触到"cout<<endl;"这样的语句。我们都知道endl表示换行的意思。我一直习惯这样使用,却并不是清楚其内部实现是怎么样的。今天看《C++ Standard Library, Sec. 13.6.1》,才真正弄明白。
首先,endl是一个操作符(Manipulators),但我们必须知道endl是一个什么类型的变量。endl是跟在”<<“运算符后面,故endl应该是一个参数。其实endl是一个函数名,它是一个"<<"运算符重载函数中的参数,参数类型为函数指针。下面我们看下内部函数实现。
1 ostream& ostream::operator << ( ostream& (*op) (ostream&)) 2 { 3 // call the function passed as parameter with this stream as the argument 4 return (*op) (*this); 5 }
1 std::ostream& std::endl (std::ostream& strm) 2 { 3 // write newline 4 strm.put('\n'); 5 // flush the output buffer 6 strm.flush(); 7 // return strm to allow chaining 8 return strm; 9 }
可以看出,运算符重载函数中的函数参数为一个函数指针,其指向一个输入输出均为ostream类引用的函数。而endl正是这样一个函数。所以我们在运行"cout<<endl;"语句时,endl是一个函数参数,类型为函数指针。然后会执行”return (*endl) (*this);“语句,即执行endl函数。endl函数输出一个换行符,并刷新输出缓冲区。
这样我们知道在标准库中endl是作为一个函数实现的,显然我们也可以直接调用这一函数。我们看下面的测试程序:
1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 cout<<endl; 7 endl(cout); 8 return 0; 9 }
其输出为两个空行。”cout<<endl"中,endl是一个类型为函数指针的函数参数,通过运算符重载函数间接调用了endl函数。而“endl(cout)”中,endl是函数名,直接调用了endl函数。
转载于:https://www.cnblogs.com/ldeng/archive/2012/09/02/2667942.html
C++ endl 详解相关推荐
- 详解让人闹心的C++语句 cout<<“Hello“<<endl;
语句"cout<<"Hello!"<<endl;"的作用是输出字符串Hello和换行符到屏幕,下面详解这句话! cout是标准库iost ...
- ORB-SLAM2代码/流程详解
ORB-SLAM2代码详解 文章目录 ORB-SLAM2代码详解 1. ORB-SLAM2代码详解01_ORB-SLAM2代码运行流程 1 运行官方Demo 1.2. 阅读代码之前你应该知道的事情 1 ...
- 【C++】C++对象模型:对象内存布局详解(C#实例)
C++对象模型:对象内存布局详解 0.前言 C++对象的内存布局.虚表指针.虚基类指针解的探讨,参考. 1.何为C++对象模型? 引用<深度探索C++对象模型>这本书中的话: 有两个概念可 ...
- C++条件变量使用详解
1. condition_variable介绍 在C++11中,我们可以使用条件变量(condition_variable)实现多个线程间的同步操作:当条件不满足时,相关线程被一直阻塞,直到某种条件出 ...
- 【OpenCV 4开发详解】分割图像——分水岭法
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...
- 【OpenCV 4开发详解】QR二维码检测
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...
- 【OpenCV 4开发详解】深度神经网络应用实例
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...
- 【OpenCV 4开发详解】图像修复
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...
- 【OpenCV 4开发详解】分割图像——Mean-Shift分割算法
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...
最新文章
- 乐行科技获1.08亿元A轮融资,并推出艾特好车
- JAVA中堆栈和内存分配原理
- Python之区块链简单记账本实现
- java k均值_算法——K均值聚類算法(Java實現)
- tensorflow神经网络结构可视化
- [转]CentOS 7忘记root密码解决办法
- canvas图形编辑器
- profile、服务、特征、属性之间的关系
- SQL Server 2005参考:PIVOT
- ntext在mysql_varchar和text说不清的那些事
- linq to xml查询绑定GridView
- How to remove replication in Syteline
- 算法速学速用大辞典 pdf_随机梯度蒙特卡洛算法-重要性采样
- C语言 图书管理系统(课程设计)
- 关闭笔记本电脑计算机键盘,笔记本小键盘怎么关闭,教您怎么关闭笔记本小键盘...
- 安卓 USB 无权限请求权限崩溃 UsbManager.requestPermission()空指针异常
- 如何在自己的应用中打开支付宝客户端
- linux 内核 禁止抢占,内核抢占实现(preempt)
- Oracle EBS FSG报表输出记录追溯出错
- CDay09 联合和枚举
热门文章
- Excel时间做差,统计加班时长
- word办公插件中的佼佼者,Word魔方
- java jdk7.0安装包_jdk7下载|java jdk 1.7下载 安装包 - 跑跑车手游网
- 软件界面原型设计工具(Web):Axure RP
- MySQL数据库名字能不能用中划线 ‘-’ ?
- 基于PyTorch的生成对抗网络入门(3)——利用PyTorch搭建生成对抗网络(GAN)生成彩色图像超详解
- 面对来势汹汹的AI大潮,你该如何应对?
- Android app升级完成以后自动重启自身App
- linux的pv原语
- 自然语言处理与模型评价