#include <iostream>
using namespace std;
void main()
{
int a=4;
cout<<((++a)+=(a++))<<endl; //结果为10
cout<<a<<endl; //结果为11
system("pause");
}
#include <iostream>
using namespace std;
void main()
{
int a=4;
cout<<((++a)=(++a)+(a++))<<endl; //结果为12
cout<<a<<endl; //结果为13
system("pause");
}
两者结果不一致,为什么呢?
首先先说说为什么(i++)不能做左值而(++i)可以。
//前缀形式,如++a
int &int::operator++()
{
*this+=1;
return *this;
}
//后缀形式,如a++,由于返回的是副本,所以设定了const int,因为给oldvalue赋值是危险的,函数出栈动作结束后,oldvalue就消失了。
const int int::operator++(int)
{
int oldvalue=*this;
++(*this);
return oldvalue;
}
那么(++a)+=(a++)和(++a)=(++a)+(a++)的结果为什么不同呢?
首先,10和11,12和13的不同时由于a++造成的。
(++a)+=(a++)
其实是先++a,那么a变成5,(a++)之后返回副本值还是5,那么5+5为10。