前言
定义
前置自增先进行赋值后自增,后置自增先进行自增后赋值
个人理解
实际上是运算级优先的的问题。对于++i,++在最前面,就是先进行自增运算。i ++则是相反。
正文干货
要想深入理解两者的区别,我们造个轮子就行了。
先定义个最简单的数字类Num,只有一个属性整形变量number。我们可以将这个类的对象视为一个整形变量。
1 2 3 4 5 6 7 8 9 10
| class Num //定义Num类 { private: int number; public: Num(int num = 0) :number(num) {}; Num operator ++(); Num operator ++ (int); friend ostream & operator<<(ostream &out, const Num num); };
|
然后我们进行运算符重载,实现这个类的前置自增和后置自增。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| Num Num::operator++() { number += 1; return *this; }
Num Num::operator++(int) { Num temp = *this; (*this).number += 1; return temp; }
|
最后,再将输出运算符<<也重载一下就完美了。
1 2 3 4 5 6
| ostream & operator<<(ostream &out, const Num num) { out << num.number; return out; }
|
测试一下:)
1 2 3 4 5 6 7
| int main() { Num a(1); cout << a++ << endl; cout << ++a << endl; return 0; }
|
从上面代码可以看出,两个函数输出的对象完全不同,前置和后置自增两者的区别甚大。