栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

关于左移运算符<<重载、cout、endl的思考总结

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于左移运算符<<重载、cout、endl的思考总结

左移运算符重载如下:


奏效!

把重载函数中的cout换成引用进来的参数out:

一样奏效!

这里为啥用cout和out效果相同?

因为out是ostream类的对象,而且这个类采用了单例模式,所以cout和out其实是同一个对象,所以效果相同。

为啥重载函数的ostream的参数必须是引用?

因为不引用的话,相当于传值,也就是要拷贝一份cout对象,但是ostream里面的拷贝构造函数是private的,无法拷贝,而且构造函数是protected的,不能在类外构造另一个对象。(其实本质还是因为ostream采用了单例模式。)

如何实现连续地输出cout<需要在运算符重载的时候返回cout的引用。

endl本质是啥?和’n’有什么不同?

在c++的源码中,endl就是一个内联函数,完成换行n和刷新缓冲区的功能,源码截图如下:

为什么endl作为一个内联函数可以被用在<<的右边?

源码如下:

依然是在ostream中写的成员函数实现<<运算符重载,这里面的*_Pfn是函数指针,当我们传递endl给<<的时候,endl作为函数名也表示函数地址,所以根据这里的重载运算符,可以实现cout< 总结

实际上cout作为ostream的对象完成c++中的输出功能,都是在ostream中进行运算符重载实现的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/317824.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号