前置++:type operator++();
后置++:const type operator++(int );
为了编译器区分前置和后置++,C++规定后缀形式有一个int类型参数 ,当函数被调用时,编译器传递一个0做为int参数的值给该函数。不这样规定,无法区分,因为都仅以自身对象为入参。
下面是一个简单的例子:
class CInt {
private :
int m_value;
//
} ;
CInt & CInt:: operator ++ ( ) // 前置的是没有参数的,并且返回引用
{
this -> m_value += 1 ;
return * this ;
}
const CInt CInt::opeartor ++ (Int) // 后置的有一个匿名参数,并且返回const值
{
CInt old = * this ;
++ ( * this );
return old;
}
|
上面的实现解释了一个关键问题:前置比后置效率高 ,后置需要构造临时对象并返回。
那为什么前置和后置返回参数不同呢?
前置仅仅是对自身进行运算,并将自身返回,这样外面可以直接对这个返回对象再进行操作 ,如(++it)->function()。
后置因其返回的不是原来的对象,此时再进行额外操作,改变的是临时对象的状态,并不异义 ,容易误解。
那为什么不返回const &呢?因为不能这么做,返回引用将无效,临时对象已经不存在了。
所以后置返回const 对象即限制对此临时对象进行误操作,并显式地告诉调用者此对象仅为原对象的副本。
另外还有一个原因:内置int类型并不支持 i++++ .而如果后置++返回一个可修改的副本将与内置int类型行为不同。故应该禁止使用者对返回值进行修改。
分享到:
相关推荐
vue+springboot+redis+kaptcha实现登录页验证码
使用前后端分离实现,后端使用SpringBoot,前端采用两种方式,一种是原生Html,一种是集成的Vue-cli,后端的相关参数我已经配置好了,大家可以直接下载运行尝试了,如果想要进一步创建自己的人脸库,可以根据我的...
HTML+PHP实现前后端交互(新手篇)简单小demo给新手参考(推荐)
基于springboot+vue.js实现的前后端分离小区物业管理系统 基于springboot+vue.js实现的前后端分离小区物业管理系统 基于springboot+vue.js实现的前后端分离小区物业管理系统 基于springboot+vue.js实现的前后端分离...
SpringBoot+thymeleaf+MyBatis+MySQL实现查询功能
基于SSM + Maven + Bootstrap实现新闻网站系统,前后端分离 基于SSM + Maven + Bootstrap实现新闻网站系统,前后端分离 基于SSM + Maven + Bootstrap实现新闻网站系统,前后端分离 基于SSM + Maven + Bootstrap实现...
springboot+websocket+redis实现聊天室功能,可以实现私聊和群聊(并支持发送图片)
JAVA分页实现,JAVA源代码+JS+HTML
Spring-Security结合JWT 实现前后端分离完成权限验证功能...正常开发需要和现有系统数据库结合,这里只是简单说明整体用户认证、授权流程逻辑说明。 仓库地址:https://gitee.com/JakeRhino/spring-security-jwt-demo
基于SpringBoot+Mybatis-Plus+JWT 实现的社区系统,前后端分离 基于SpringBoot+Mybatis-Plus+JWT 实现的社区系统,前后端分离 基于SpringBoot+Mybatis-Plus+JWT 实现的社区系统,前后端分离 基于SpringBoot+Mybatis-...
PHP+MYSQL入门学习并实现后端增删改查,bootstrap实现后端页面;前端有ajax请求json格式数据,jquery动态创建元素等
Java毕业设计 基于SpringBoot+Vue前后端分离的前后端分离的通讯录项目的设计与实现+部署文档+全部资料(优秀项目)Java毕业设计 基于SpringBoot+Vue前后端分离的前后端分离的通讯录项目的设计与实现+部署文档+全部...
基于Python+Flask+sqlite+Vue前后端分离的图书管理系统的设计与实现+详细文档+全部资料(高分毕业设计).zip基于Python+Flask+sqlite+Vue前后端分离的图书管理系统的设计与实现+详细文档+全部资料(高分毕业设计)....
基于SpringBoot+Vue+Element-UI实现的前后端分离抗疫物资管理系统源码+项目说明.zip基于SpringBoot+Vue+Element-UI实现的前后端分离抗疫物资管理系统源码+项目说明.zip基于SpringBoot+Vue+Element-UI实现的前后端...
基于SpringBoot+Vue实现的前后端分离的医疗信息管理系统源码+数据库文件.zip基于SpringBoot+Vue实现的前后端分离的医疗信息管理系统源码+数据库文件.zip基于SpringBoot+Vue实现的前后端分离的医疗信息管理系统源码+...
【项目介绍】 该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!...基于JavaScript+Vue+Element实现的前后端分离的在线评测系统源码+项目使用说明+部署教程(毕设项目).zip
Ionic+Angular+Express实现前后端交互使用HttpClient发送get请求数据并加载显示示例代码
Spring boot+mybatis+shiro+mysql+jwt+quartz+swagger2+easyexcel 等框架搭建的后端服务,前端使用vue3+typescript+andtdesgin 等技术 实现了前后端分离,该项目更细度的控制了权限,实现了细度的RBAC功能.
SpringBoot项目整合WebSocket+netty实现前后端双向通信(同时支持前端webSocket和socket协议哦) SpringBoot项目整合WebSocket+netty实现前后端双向通信(同时支持前端webSocket和socket协议哦) SpringBoot项目整合...