区别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,而临时变量是右值。