题目
int x = 4;
int y = 4;
x = (y++);
cout<<x<<endl;
输出x为多少?
反汇编如下
int x = 4;
013013DE mov dword ptr [x],4
int y = 4;
013013E5 mov dword ptr [y],4
x = (y++);
013013EC mov eax,dword ptr [y]
013013EF mov dword ptr [x],eax 先赋值
013013F2 mov ecx,dword ptr [y] 再加1
013013F5 add ecx,1
013013F8 mov dword ptr [y],ecx
所以输出结果为4,括号在这里其实并不起作用。
我是这样理解的,由于y++的实现是返回一个临时变量,所以在自增之前值已经返回值用于赋值,所以自增对返回的值没有影响,因此结果和不加括号的y++是一样。