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

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)形式

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值