【M6】区别increment/decrement操作符的前置(prefix)和后置(postfix)形式
2014-02-25 18:54
686 查看
1、考虑++(--的情况是一样的),前置是累加然后取出,后置是取出然后累加。
2、重载方法根据形参表的不同区分,问题来了,前置和后置形式都没有形参,因此没法区分。怎么办?
对于后置增加一个形参int,在方法内并不使用这个形参,因此去掉形参名。
3、考虑UPint(unlimited precision int)类,对于前置,返回引用,实现如下:
UPint& UPint::operator++()
{
*this+=1;
return *this;
}
4、考虑后置,后置返回老的对象。为了保证前置和后置的结果一致性,和代码的复用,使用后置调用前置。如下:
const UPint UPint::operator++(int)
{
UPint old = *this;
++(*this);
return old;
}
5、考虑,为什么后置++返回const对象?
方法返回const对象,是为了禁止用户对返回值赋值。考虑,++++i; 相当于对i累加两次。如果后置++不是返回const对象,对于i++++;程序员期望也是对i累加两次,但实际上做了什么事情呢?
第一个++返回一个临时对象,对i加1,第二个++是对临时对象加1,这显然违反直觉。并没有对i累加两次,因此方法返回const对象,禁止用户使用i++++
6、后置形式产生临时对象,效率差。并且为了结果的一致性,后置调用前置。因此,在不使用旧值的情况下,强烈建议使用前置形式,因为前置效率高。
2、重载方法根据形参表的不同区分,问题来了,前置和后置形式都没有形参,因此没法区分。怎么办?
对于后置增加一个形参int,在方法内并不使用这个形参,因此去掉形参名。
3、考虑UPint(unlimited precision int)类,对于前置,返回引用,实现如下:
UPint& UPint::operator++()
{
*this+=1;
return *this;
}
4、考虑后置,后置返回老的对象。为了保证前置和后置的结果一致性,和代码的复用,使用后置调用前置。如下:
const UPint UPint::operator++(int)
{
UPint old = *this;
++(*this);
return old;
}
5、考虑,为什么后置++返回const对象?
方法返回const对象,是为了禁止用户对返回值赋值。考虑,++++i; 相当于对i累加两次。如果后置++不是返回const对象,对于i++++;程序员期望也是对i累加两次,但实际上做了什么事情呢?
第一个++返回一个临时对象,对i加1,第二个++是对临时对象加1,这显然违反直觉。并没有对i累加两次,因此方法返回const对象,禁止用户使用i++++
6、后置形式产生临时对象,效率差。并且为了结果的一致性,后置调用前置。因此,在不使用旧值的情况下,强烈建议使用前置形式,因为前置效率高。
相关文章推荐
- Find linux下
- POJ 2632: Crashing Robots 哎呀!撞了!
- Ubuntu下Android源码的获取(Android4.4为例)
- Amber安装并行
- web1.0
- JQuery选择器
- 2013年终总结--缅怀过去,展望未来
- 什么样的人适合创业公司?
- linux网络编程
- MySQL 常用命令
- 唐代五言绝句最佳者
- erlang 自己搞定一个简单的MakeFile
- 源码安装LAMP,以Module方式使用PHP并使用xcache 2.0.0加速PHP
- UVa 10603 - Fill
- 辞旧迎新 be better---记我的2013
- 冗余(代码冗余)
- 字符串匹配的KMP算法---计算失配函数
- 市委组织部项目--js调用后台方法(一)
- GCD vs NSOperation
- Java Web的笔记