JoeChenzzz

导航

i++和++i

区别1: i++ 返回原来的值,++i 返回加1后的值

  这个很明显,不给予解释。

区别2: i++ 不能作为左值,而++i 可以

1 int i = 0;
2 ++i = 1; //正确
3 i++ = 5; //错误

左值:

  左值放在赋值符号(=)的左边,左值表示存储在计算机内存的对象,而不是常量或计算的结果。左值在内存中可以进行读和操作,左值可以被赋值

右值:

  右值放在赋值符号(=)的右边,右值代表的真实值,相当于数据值,不可以被赋值

简单来说,左值与右值的根本区别在于是否允许取地址运算符&获得对应的内存地址。

// ++i
int& int::operator++() //这里返回的是一个引用形式,就是说函数返回值也可以作为一个左值使用
{
  *this += 1;  // 增加
  return *this;  // 取回值
}

//i++
const int int::operator++(int) //函数返回值是一个非左值型的,额外的int形参在函数中可以使用但是一般不这么做,只是用来区分后置版本和前置版本
{
  int oldValue = *this;  // 开辟额外的空间,存下原值
  ++(*this);  // 调用++i增加
  return oldValue;  // 返回被取回的值
}

i++ 最后返回的是一个临时变量oldValue,而临时变量是右值

posted on 2018-09-26 11:22  JoeChenzzz  阅读(256)  评论(0编辑  收藏  举报