关于布尔类型返回值函数的一个小疑问今天遇到了这样一种类似的描述,我来举个例子,请大家帮忙解释一下。有一
关于布尔类型返回值函数的一个小疑问
今天遇到了这样一种类似的描述,我来举个例子,请大家帮忙解释一下。
有一些以整型数字作为函数运行状态表征的函数,但以bool类型作为其返回类型,那么很显然,0为false,非0为true。当函数返回时,在主调函数处做一个很简单的返回值检查,以判断是true还是false。这时候,比较稳妥的写法是判断返回值是否不为false,而不是判断其是否为true。请问为什么??这两种写法的不等价之处究竟在哪里,请大家指点一下。
bool function (ElemType1 p1,ElemType p2); // 比如有这样一个bool函数,实际的返回值是整型数字
//...
int main() // 将问题简化一下,在主函数里调用function函数,并把返回值赋给变量result
{
bool result = function(p1, p2);
if( result != false ) // 为什么这样的写法比较稳妥?
{
//...
}
// if( result == true ) 请问这样写为什么不如上面的写法更稳妥?
}
[解决办法]如果是bool这种内置类型, 永远只有true,false两种结果, 所以你说的 ==true 或者 != false实际是完全等效的.
除非你的bool不是内置类型, 而是一个定义的类型, 比如VS中的BOOL 实际上是一个int类型, 这时使用 != FALSE 就是稳定的, 因为FALSE = 0, 非0就是真了, 如果==TRUE, 因为TRUE是1,除了1非零外, 还有很多非零的数.
从代码的易维护性来说也, != FALSE也要好一些, 如果你哪天想改掉函数返回值, 并且仍然以0表示成功, 其它返回错误码, 那么你的调用的地方在不使用错误码的情况下, 程序不会要任何修改,仍然可以正常运行.
[解决办法]很多人不习惯
if(a)。。。,
if(!a)。。。
这种用法
而是会习惯的写出
if(a == true )。。。。,if(a == false)。。。。
这种代码。
那么当 a 是个整数的时候,就要注意了,
if(a == true ) 。。。。 这个 不能表示 a!=0 他表示的是 a==1,除了1 以外,其他整数 都不等于1,即true
写成
if(a != false)。。。。
可以在这种情况下,保证程序是正确的。
也符合C 除了0,其他整数,可能还有浮点数,都表示true的传统。