c++ 自加(自减)运算符--后++或--为什么要返回一个const?

来源:互联网 发布:淘宝欠下贷款怎么协商 编辑:程序博客网 时间:2024/05/29 17:56

c++ 自加(自减)运算符

(1)a++++;     /* a++返回的是一个const; */

(2)++++a;

(3)++a++;    /* a++返回的是一个const; */

(4)a++=b;    /* a++返回的是一个const; */

(5)++a=b;

1,对于a,b为整数等简单类型,则(1,3,4)错误,(2 ,5)正确。所有错误的原因都是因为a++返回的是一个常量而不是变量,在进行(左++)或者(右++)或者(=)操作都是不对的。

2,若a,b为对象时,重载operator++运算符。若想和整数等简单类型一致的话,需要实现

OBJ & operator++(); 与const OBJ  operator++(int a);两个重载函数,则和上述的错误正确结果一致。

3 ,若a,b为对象时,重载operator++运算符。若实现  OBJ & operator++(); 与 OBJ  operator++(int a);两个重载函数(去掉 const),则上述的所有题目结果都正确。

4,后置式为什么要返回一个const对象?首先返回值必须是一个对象,这是显然的,因为要返回累加前的对象;其次为什么是const对象呢?如果不是const对象会出现什么情况:

违反了后置++的运算语法规则:C语言中不允许两次使用后置++操作符,即下面的操作是非法的:

int i;
i++++;       //error! (但++++i是合法的)

如果我们返回不是const对象,意味着下面的操作编译器不会报错:

OBJ c;

c++++;          //不会报错,调用的动作如下 c.operator++(0).operator++(0);

5,尽量使用前置式的自增运算符,因为后置式运算符需要申请一个临时对象保存原值,有拷贝构造和析构的代价(对于简单类型,保存一个常量并返回),而前置式没有。

6,前置式自增运算符是先对对象进行修改,然后返回原对象的引用;后置式自增运算符是先申请临时对象保存原对象的值,再在原对象身上进行值修改返回临时对象。

参考:

1,自增操作符和自减操作符详细参考

2,C++自增运算符的探索

3,区别increment/decrement操作符的前置(prefix)和后置(postfix)形式

1 0
原创粉丝点击