博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
前缀式与后缀式
阅读量:6476 次
发布时间:2019-06-23

本文共 841 字,大约阅读时间需要 2 分钟。

1、考虑下面的场景:有一个Person类,内部有个age字段,对外提供前缀式和后缀式,把年龄加1。

2、前缀式与后缀式都没有右操作数,也就是说没有形参,需要区分前缀式和后缀式,对于后缀式中增加一个形参。因为这个形参在方法内并不使用,可以省略形参名。

3、前缀式和后缀式是操作符重载,本质上是方法,和GetName()一样。

4、前缀式:

1 Person& Person::operator ++()2 {3     this->age = this->age+1;4     return *this;5 }

5、后缀式:

1 const Person Person::operator ++(int)2 {3     Person old = *this;    4     ++(*this)5     return old;6 }

二者区别:

1、因为前缀式与后缀式操作符相同,都不需要形参,为了使用过载,对于后缀式增加一个形参。由于方法不使用形参,省略形参名。

2、前缀式返回引用,后缀式返回const对象。为什么?

  前缀式表达的意思是:先加1,再返回当前对象,很好理解。

  后缀式表达的意思是:获取旧值,当前对象加1,返回旧值。后缀式创建一个局部对象,返回局部对象,但是为什么返回const对象呢?

  如果返回不是const对象,考虑下面的情况:p++++;程序员期望对p加2,但实际上呢?第一个++返回一个局部对象,第二个++是对局部对象加1,而不是对原对象p再次加1,这与程序员的期望不一致,为了解决这个问题,让后缀式返回const对象。(注:前缀式可以++++p)

3、考虑效率,对于自定义类型,后缀式效率差很多,涉及到局部对象的构造析构,还有返回类型时临时对象的构造析构。对于基本类型,前缀式与后缀式差别不大,但是为了一致性考虑和代码复用,后缀式往往调用前缀式,也就是说后缀式多了一次方法调用,效率差一点。因此,在前缀式与后缀式等价的情况下,使用前缀式。

转载地址:http://wglko.baihongyu.com/

你可能感兴趣的文章
vue-resumer 项目中 element-ui 遇到的 textarea autosize 问题
查看>>
以主干开发作为持续交付的基础
查看>>
PHP扩展库PEAR被攻击,近半年下载者或被影响
查看>>
传统运维团队转型应该注意哪些问题?
查看>>
JavaScript函数(二)
查看>>
Airbnb改进部署管道安全性,规范部署顺序
查看>>
腾讯最大规模裁撤中层干部,让贤年轻人
查看>>
当我们谈性能的时候,我们实际上在谈什么?
查看>>
蔡超:入门 Go 语言必须跨越的五个思维误区
查看>>
使用Akka Actor和Java 8构建反应式应用
查看>>
curl常用命令详解
查看>>
saltstack 添加计划任务
查看>>
Puppet module命令参数介绍(六)
查看>>
《UNIX网络编程》中第一个timer_server的例子
查看>>
CISCO 路由器(4)
查看>>
网络服务搭建、配置与管理大全(Linux版)
查看>>
Silverlight 5 Beta新特性[4]文本缩进控制
查看>>
springMVC多数据源使用 跨库跨连接
查看>>
Git服务端和客户端安装笔记
查看>>
Spring Security(14)——权限鉴定基础
查看>>