在写代码的时候遇到
int a = 4;
int b = a++*a;
本来想着b应该等于16,但结果等于20;
由于int类型的前++和后++的具体实现要去查看汇编代码,比较麻烦,所以这里定义一个新的类型来描述前++和后++的行为;
class Age
{
int age;
public:
// ++Age,前++
Age & operator++()
{
age = age+1;
return *this;
}
// Age++,后++
const Age operator++(int)
{
Age tmp = *this;
++(*this);
return tmp;
}
}
大概前++和后++的过程就是这样,所以(a++)这里返回一个临时对象的值,该值等于原来a的值,但其实a本身的值已经加了1,所以后面再乘以a的时候,a的值已经等于5;故b=20;