前置和后置操作符的区别(More Effective_C++_6(运算符))
来源:互联网 发布:美利坚仓储淘宝王无错 编辑:程序博客网 时间:2024/06/07 06:28
++和- -的原理类似,下面仅++操作符来分析前置和后置的区别
先看一段代码:
class A{pubilc:A& operator++();//前置++const A operator++(int);//后置++A& operator--();//前置--const A operator--(int);//后置--};A a;++a;//调用a.operator++()a++;//调用a.operator++(0)--a;//调用a.operator--()a--;//调用a.operator--(0)
从以上代码中,我们大致能看出前置和后置的不同之处:
1. 返回值类型不同,重载后置++或–,返回值类型为const;
2. 参数不同,重载后置++或–,含有参数int;
下面我们再看一段前置和后置具体实现的代码,来了解参数int的意义:
//前置式:先累加后取出A& operator++(){*this=*this+1;//累加return *this;//取出}//后置式:先取出后累加const A operator(int){A oldValue=*this;//取出++(*this);//累加(注:这里后置式的实现,以前置式为基础)return oldValue;//返回累加之前的值}
关于参数int的作用
看到以上代码段,我们会发现后置++并没有动用参数int,那么,这个参数唯一的作用只是为了区别前置式后后置式而已;
关于返回值为const的问题
另外,为什么后置式操作符返回的值必须是const,这是为什么?原因是为了使a++++
不合法,假如返回值类型不是const,那么这和a.operator++(0).operator++(0)的动作类型相同,即第二个调用动作施行于第一个调用动作的返回值对象身上;
当返回值为const时,第一次调用operator++返回的const对象,将被用来进行operator++的第二次调用,然而operator++是个non_const成员函数,所以const对象无法调用,即禁止了a++++;
关于效率问题
前置式的效率比后置式的效率更高,因为后置式每次都必须产生一个临时对象作为返回值之用,而前置式很明显不需要临时对象;所以,处理用户定制类型时,应该尽可能的使用前置式
另外,后置式++和–的实现应该以前置式++和–为基础,这样的好处是,你只需要维护前置式的版本,因为后置式版本会自动调整为一致行为
参考:More Effective C++中文版(侯捷译)
0 0
- 前置和后置操作符的区别(More Effective_C++_6(运算符))
- 前置运算符和后置运算符的区别
- 前置与后置运算符的区别
- C++ 递增运算符:前置++和后置++的区别
- 关于前置操作符和后置操作符的区别
- 重载操作符++,区别前置和后置
- 读书笔记: More Effective ++ 操作符 条款6,区别increment/decrement操作符的前置(prefix)和后置(postfix)的形式
- 运算符前置++和后置++的重载
- 前置和后置++运算符的重载
- 关于++操作符的前置和后置的区别
- 操作符重载前置和后置的区别与实现
- 关于运算符 前置 ++ 和后置++ (--)
- 前置和后置运算符
- 《More Effective C++》学习心得(五) 前置和后置自增运算符
- 前置运算符与后置运算符的区别
- 区别increment/decrement操作符的前置(prefix)和后置(postfix)形式
- C++中前置递增运算符和后置递增运算符的区别
- 对象前置++,前置--;后置++,后置--(没有利用《和》重载运算符)
- Android语言国际化
- 表单js验证文件上传大小
- html5开发之viewport使用
- 机器学习降维算法一:PCA (Principal Component Analysis)
- 进程与线程的区别与联系
- 前置和后置操作符的区别(More Effective_C++_6(运算符))
- POJ 3480 John(尼姆变型,取光者输)
- 中兴应用之星携手天翼开放平台:让APP开发更简单
- POJ 2479 (后附 POJ 2593) DP
- 高德地图远程获取手机的敏感信息可远程命令执行(可以远程利用非webview)
- 9.11排序与查找(五)——有个排序后的字符串数组,其中散布着一些空字符串,找出给定字符串的位置
- 数字证书原理
- JAVA-QUEUE类图
- 监听手指左右滑动屏幕的事件,封装好了一个类