菜鸟菜问题
哪位能解释一下为什么:5==a 比 a==5效率高?
谢谢!
=================================
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
★☆☆☆☆☆☆☆只要决心成功失败永远不会将我击垮!☆☆☆☆☆☆☆★
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
问题点数:22、回复次数:9Top
1 楼fangrk(加把油,伙计!)回复于 2002-05-21 14:08:01 得分 0
没有听说过。Top
2 楼jimconrad(jimmy)回复于 2002-05-21 14:10:08 得分 5
是为了防止程序员不小心将 a==5 写成 a=5 引起的难以排查的错误!因为 5=a 再编译时刻就能被发现.Top
3 楼jetcode(不能呼风唤雨却可顶天立地)回复于 2002-05-21 14:47:19 得分 0
难道一点都不关效率的事吗?
我看过一篇文章,似乎确和效率有关的。Top
4 楼jetcode(不能呼风唤雨却可顶天立地)回复于 2002-05-21 15:07:18 得分 0
高手这么多难道就没人能回答这个问题?
:-<Top
5 楼jyc_nj(老蔣)回复于 2002-05-21 15:23:44 得分 2
jimconrad(jimmy)说的应该是唯一的原因.
VC6下反汇编后都是一样的,我想大多数编译器对这两句的处理都是一样的吧.Top
6 楼steedhorse(晨星)回复于 2002-05-21 15:23:44 得分 15
没有效率问题,看下面的源程序和该程序的反汇编代码就知道了:
//源程序:
#include <iostream.h>
void main()
{
int a;
a = 5;
if(5 == a)
cout << "5 == a";
if(a == 5)
cout << "a == 5";
}
//反汇编代码:
1: #include <iostream.h>
2:
3: void main()
4: {
00401010 push ebp
00401011 mov ebp,esp
00401013 sub esp,44h
00401016 push ebx
00401017 push esi
00401018 push edi
00401019 lea edi,[ebp-44h]
0040101C mov ecx,11h
00401021 mov eax,0CCCCCCCCh
00401026 rep stos dword ptr [edi]
5: int a;
6: a = 5;
00401028 mov dword ptr [ebp-4],5
7: if(5 == a);!!!!!!!!!!!!!!!!!!!!!!注意这里
0040102F cmp dword ptr [ebp-4],5
00401033 jne main+34h (00401044)
8: cout << "5 == a";
00401035 push offset string "5 == a" (00425024)
0040103A mov ecx,offset cout (004289c0)
0040103F call ostream::operator<< (00401290)
9: if(a == 5);!!!!!!!!!!!!!!!!!!!!!!还有这里
00401044 cmp dword ptr [ebp-4],5
00401048 jne main+49h (00401059)
10: cout << "a == 5";
0040104A push offset string "a == 5" (0042501c)
0040104F mov ecx,offset cout (004289c0)
00401054 call ostream::operator<< (00401290)
11: }
00401059 pop edi
0040105A pop esi
0040105B pop ebx
0040105C add esp,44h
0040105F cmp ebp,esp
00401061 call __chkesp (004032a0)
00401066 mov esp,ebp
00401068 pop ebp
00401069 ret
Top
7 楼jetcode(不能呼风唤雨却可顶天立地)回复于 2002-05-21 15:24:51 得分 0
同志们,我的可用分确实不多啊。况且也不是很难的问题。
能解决的一定给分!!!
详细解释的一定加分!!!Top
8 楼jetcode(不能呼风唤雨却可顶天立地)回复于 2002-05-21 15:45:44 得分 0
非常感谢大家。
17:00前一定结分!!!Top
9 楼wangxj0600(闭门思过中)回复于 2002-05-21 17:14:54 得分 0
已经过了。Top




