考虑下面的C++代码片段:
...
if (false == func()) // Line #1
{
...
...
}
int func()
{
...
{
...
return false;
}
...
return true;
} 在上面的代码片段中,函数func()的原型表明它返回一个整数。但是在函数func()中,它返回false或true。
同样在第1行,根据布尔值检查函数func()的返回值。
我想知道这种用法有没有问题。如果存在问题,建议需要进行哪些整改。
发布于 2013-07-02 14:15:14
没有问题,任何非零的整数都会转换成true,而零就是false。相反,可以将bool转换为int,将true转换为1,将false转换为0。
但是,在比较布尔值时,您不需要如此冗长:
if (!func()) { .... }当然,如果函数只返回true或false,那么直接返回bool是有意义的:
bool func();发布于 2013-07-02 14:20:42
来自于标准
4.7整数转换
如果目标类型为bool,请参见4.12。如果源类型是bool,则将值false转换为零,将值true转换为1。
4.12布尔转换conv.bool
算术、无范围枚举、指针或指向成员类型的指针的pr值可以转换为bool类型的pr值。将零值、空指针值或空成员指针值转换为false;将任何其他值转换为true。类型为std::nullptr_t的pr值可以转换为bool类型的pr值;结果值为false。
发布于 2013-07-02 15:40:47
在func中,您提供的bool将转换为int以供返回。false转换为0,true转换为1。
在比较中,您的常量false被转换为int,其值为0。
通常,如果您选择其中之一,代码的可读性会更好:要么通篇使用bool类型,要么使用int类型和值0。
https://stackoverflow.com/questions/17418584
复制相似问题