m = 1; n = m+++m++; m取内存几次?
看到裘大师文章中有关顺序点的讨论,其中m = 1; n = m+++m++; 就是讨论的例子,小弟有问题请教
1.这里的n = m+++m++; 是不是无论先做前面还是先做后面的m++,m都只取内存一次,即第二次计算m++是取寄存器里的m值;
2.这里m+++m++有顺序点吗?按裘大师的讲法,n的值不确定,那就表示是有顺序点的,但是这个顺序点在哪里产生的呢?
[解决办法]
不同编译器不同的处理方式
XP VS2005 debug
汇编如下。
m+++m++ 操作了5次内存。
int n = m+++m++;操作了6次内存。
int m = 1;
004A663F mov dword ptr [ebp-24h],1
int n = m+++m++;
004A6646 mov eax,dword ptr [ebp-24h]
004A6649 add eax,dword ptr [ebp-24h]
004A664C mov dword ptr [ebp-30h],eax
004A664F mov ecx,dword ptr [ebp-24h]
004A6652 add ecx,1
004A6655 mov dword ptr [ebp-24h],ecx
004A6658 mov edx,dword ptr [ebp-24h]
004A665B add edx,1
004A665E mov dword ptr [ebp-24h],edx