不废话,看代码:
void f(int& val)
{
val++;
}
- Assembly code
6: val++; //c++中的00401048 mov eax,dword ptr [ebp+8]0040104B mov ecx,dword ptr [eax]0040104D add ecx,100401050 mov edx,dword ptr [ebp+8]00401053 mov dword ptr [edx],ecx7:8: }
[ebp+8]保存 参数val的值
然后进入函数体, 执行va++;
要是我写汇编的话,
我直接:
mov eax,[ebp+8];
add eax,1;
mov [ebp+8],eax;
即可
不知道 那段汇编搞什么??
eax保存了[val+8]的地址,ecx又保存了dword ptr [eax] 即ecx保存了[val+8]这块内存的内容!!!
然后 add ecx,1;
接着:又把[val+8]内存的地址放到edx中!!
然后把修改后的ecx的值放到[ebp+8]中!!
不知道vc搞什么,。 搞了这么复杂,到底想干什么???
------解决方案--------------------------------------------------------
你开优化了么?
生成的没错啊。因为你是传引用进去的实际第一个参数是val的地址。
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
[ebp+8]存的是变量的地址,所以inc [ebp+8] 是不行的,至少要两句:
mov eax,[ebp+8]
inc dword ptr [eax]
------解决方案--------------------------------------------------------
引用本质上就是指针,所以只看汇编是看不出来的