了解++/--操作符

由于++和--是同理的,这里姑且只以++说明
前置++这里我简称前++,同样后置++这里简称后++

我想很多人跟我之前一样,知道前++和后++的区别也会用。很多老师和书本是这样告诉我们的:
前++是先对变量进行+1操作再返回变量,
后++就是先返回变量的值再对变量进行+1操作

大学老师是这么教我的,想想后来工作也很少思考过这个问题,再者就是我也从来不对++/--写复杂的语句。
今天在more effective c++书中看到有关这个++/--操作符的部分,忽然发现原来自己对此认识得是这么的不深刻。
不过我很高兴因为我又深刻理解了C++的一个小部分,而随着我深刻理解的内容越来越多,我对C++认识也会越来越深。
废话少说,我们来谈谈++/--操作符。现在让我来改正一下之前的不妥的定义:
前++是对变量+1然后返回变量的引用(如果你胡乱重载前++操作符,这里是不包括的
后++是先将变量的值保存在一个临时变量中,然后对变量+1,最后返回那个临时变量的值,注意这里是值,另外这里返回的类型是const类型,
这也就是为什么后++在进行++的原因。

现在让我们来说说如果重载前++和后++,其实你很少会有机会这么做,但我们应该对此清楚。
为了方便大家理解,这里我自己写了一个例子:

  1. class CustomInt
  2.         {
  3. public:
  4.         CustomInt& operator++(); //前++
  5.         const CustomInt operator++(int);//后++
  6.        
  7.         CustomInt& operator+=(int); //+=操作符
  8.        
  9. private:
  10.         int i;
  11.         };
  12. CustomInt& CustomInt::operator++()
  13.         {
  14.         *this += 1;
  15.         return *this;
  16.         }
  17. const CustomInt CustomInt::operator++(int)
  18.         {
  19.         const CustomInt oldTemp = *this;
  20.         *this += 1;
  21.         return oldTemp;
  22.         }
  23. CustomInt& CustomInt::operator+=(int aValue)
  24.         {
  25.         i += aValue;
  26.         return *this;
  27.         }

使用CustomInt如下:

  1. CustomInt test;
  2. ++test; //调用test.operator++();
  3. test++; //调用test.operator++(0);

相信看了代码之后会变的清楚很多,但仍可能会有疑问,没关系,接下来我会一一说明。
首先让我们来看看前++和后++操作符的声明:

  1.         CustomInt& operator++(); //前++
  2.         const CustomInt operator++(int);//后++

除了operator++这个名字一样外其他都不一样,先来说说返回值:
前++的返回值它的引用,我们可以这样写++test++,没有问题。
后++的返回值是一个常引用,因此我们不能直接修改后++的返回值,这里修改后++的返回值也是没有意义的,因为它返回的只是一个临时变量而已,只是一个编译器产生的临时变量而已,对你而言是没有用处的。

如果你比较仔细你会发现后++有参数,但却没有用,为什么呢?
这里只是为了区别于前++操作符而已,想想,如果没有这个参数,那么前++和后++操作符便只有返回值不一样了,注意这可不能算是重载哦,这么写编译器会 给你一个illegal function overloading的错误,这里如果你还是不清楚为什么编译器就不允许呢,那你一定要自己想想了,哈哈。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值