在一本资料书上看到了这样一个函数:
bool function(int x,int y)
{
......
return x==y;
}
我想问大家的是,x==y这个语句到底是怎样实现的?
它等价于什么语句?我们平时看到的大都如下:
if(x==y)
{
return ture
}
else
{
return false
}
bool function(int x,int y)
{
......
return x==y;
}
我想问大家的是,x==y这个语句到底是怎样实现的?
它等价于什么语句?我们平时看到的大都如下:
if(x==y)
{
return ture
}
else
{
return false
}
if ( x == y )
bRtn = TRUE;
return bRtn;
{
return TRUE;
}
return FALSE:
{
return ture
}
else
{
return false
}
是等价的,不过前者更加简洁
{
return ture
}
else
{
return false
}
这里面 x y 适用于 int 类型
float double 很难做到 相等的概念
所有浮点数 是做差 < 10 E -5 来判断更好一些
等号两边的是IUnknown类型的变量。我觉得这个等号操作两边的操作数只要类型一样就可以按照它们的类型规则进行比对,
如果不一样为非0值,返回false,如果一样为0值,返回true。
就像汇编里的test指令。不知道这样理解是否正确?
另外:
return x==y;
上面的是不是比下面的执行的更快一点?在时间上和空间上都优越一点?
if(x==y)
{
return ture
}
else
{
return false
}
不建议这样写
相当于:
if(x==y)
{
return ture
}
else
{
return false
}
否则返回false
{
return TRUE;
}
return FALSE:
就是。。楼上他们说的。
ret = (x==y);
returm ret;
{
return ture
}
else
{
return false
}和return x==yRelease版本中,编译出来后有没有效率上的区别?
if else 是5条指令,时间也慢。
== 是操作符,你能够理解 return x+y;吗???就是一样的道理呀。那么x==y自然就是一个表达式,显然一切就是那么简单。 x,y是int类型,int类型支持==操作符,所以能x==y这样用。如果是自己定义的类型就要重载==操作符。时间与空间的问题是算法复杂度的概念,应该来说在数量级上的差别才能区别这两种算法的优劣,显示这两种都在常量级,也就无所谓算法的好与坏。只是少两行代码,代码比较简洁而已。
mov eax,dword ptr [ebp+8]
xor ecx,ecx
cmp eax,dword ptr [ebp+0Ch]
sete cl
mov eax,ecx
00401038 8B 45 08 mov eax,dword ptr [ebp+8]
0040103B 3B 45 0C cmp eax,dword ptr [ebp+0Ch]
0040103E 75 07 jne equ+27h (00401047)
5:
6: return 1;
00401040 B8 01 00 00 00 mov eax,1
00401045 EB 02 jmp equ+29h (00401049)
7:
8: else
9:
10: return 0;
00401047 33 C0 xor eax,eax
return x==y; 加上个圆括号 变成
return (x==y); 要好理解得多吧
{
return ture
}
else
{
return false
}
效果一样。