i++ and ++i的误解
不知在那本书上看到 ++i比i++要快(i++需要一个临时变量存储i的值后再++),就记住这个一直没测试,所以在写代码的时候 一直就使用++i觉得它快。今天测试了下发现并不是这么回事,一直被误解。所以写了简单的demo测试了下:
int a,c;a = 0;00181B88 mov dword ptr [a],0 a++;00181B92 mov eax,dword ptr [a] 00181B98 add eax,1 00181B9B mov dword ptr [a],eax ++a;00181BA1 mov eax,dword ptr [a] 00181BA7 add eax,1 00181BAA mov dword ptr [a],eax c =a++;00181BB0 mov eax,dword ptr [a] 00181BB6 mov dword ptr [c],eax 00181BBC mov ecx,dword ptr [a] 00181BC2 add ecx,1 00181BC5 mov dword ptr [a],ecx c = ++a;00181BCB mov eax,dword ptr [a] 00181BD1 add eax,1 00181BD4 mov dword ptr [a],eax 00181BDA mov ecx,dword ptr [a] 00181BE0 mov dword ptr [c],ecx c = a+1;00181BE6 mov eax,dword ptr [a] 00181BEC add eax,1 00181BEF mov dword ptr [c],eareturn 0;00181BF5 xor eax,eax }
一看就明白了
- 2楼JohnPhan2013-05-03 22:07
- c = a + 1 n这样的结果。匪夷所思。
- 1楼v2abcd2013-05-03 13:46
- 内置类型是无区别n你试试自定义个Point再看看?再来个复杂点的迭代器?当然操作符定义要符合原意。n就像你不能说”我和你都是男人,所以我们是同一个人“一样,这样片面的结果,不能证明什么