#include <iostream>
using namespace std;
int main()
{
int a = 12;
a += a -= a *= a;
cout<<a;
return 0;
}
结果a为:0;
;
;编译环境:vs2008
;
010914C5 mov eax,dword ptr [a] ;a*=a
010914C8 imul eax,dword ptr [a]
010914CC mov dword ptr [a],eax
010914CF mov ecx,dword ptr [a] ;a-=a
010914D2 sub ecx,dword ptr [a]
010914D5 mov dword ptr [a],ecx
010914D8 mov edx,dword ptr [a] ;a+=a
010914DB add edx,dword ptr [a]
010914DE mov dword ptr [a],edx
结论:+=、-=、/=、*=这些双目运算符先运算右边的表达式,所以a+=a-=a*=a ==> a+=(a-=(a*=a));从a*=a的汇编代码中可以看出
a和a相乘后会把a*a的值写入到a变量的内存地址中。而且=、+=、-=、/=、*=中的每一个运算都会把结果写到左值(a)的内存地址中。