将函数的整数返回值与C ++中的bool进行比较

时间:2013-07-02 06:13:23

标签: c++ function boolean return-value

请考虑以下C ++代码段:

...

if (false == func()) // Line #1
{
 ...
 ...
}

int func()
{
 ...
  {
     ...
     return false;
  }
 ...

 return true;
} 

在上面的代码片段中,函数func()的原型表明它返回一个整数。但在函数func()中,它会返回falsetrue

同样在第1行中,函数func()的返回值是根据布尔值检查的。

我想知道这种用法是否有任何问题。如果有问题,建议需要进行哪些整改。

4 个答案:

答案 0 :(得分:8)

没有问题,任何非零整数都转换为true,零为false。相反,bool可以转换为inttrue转换为1false转换为0

在比较布尔值时,您不需要如此冗长:

if (!func()) { .... }

当然,如果该函数仅返回truefalse,如您的示例所示,则直接返回bool是有意义的:

bool func();

答案 1 :(得分:2)

来自标准

  

4.7整体转换

     

如果目的地类型是bool,请参阅4.12。如果源类型是bool,则值false将转换为零和   值true将转换为一个。

     

4.12布尔转换[conv.bool]

     

算术,无范围枚举,指针或指向成员类型的指针的prvalue可以转换为a   bool类型的prvalue。零值,空指针值或空成员指针值转换为false;   任何其他值都转换为true。类型为std :: nullptr_t的prvalue可以转换为prvalue   类型bool;结果值为false。

答案 2 :(得分:1)

func内,您提供的bool会转换为int以便返回。 false转换为0true转换为1

在比较中,您的常量false将转换为int,其值为0

通常,如果您选择一个代码,您的代码会更好地阅读:要么始终使用bool类型,要么使用int类型和值0

答案 3 :(得分:0)

在函数func()中,源类型为bool,目标类型为int(因为函数的返回类型为int),因此值false将转换为零,值true将转换为值目的地类型之一。当返回到第1行时,这个int会自动转换为bool,因为func可以返回1或0,值0变为false,1变为true。如果func返回任何非零值,它将在第1行自动转换为true。

在“积分转换”和“布尔转换”部分中查看this website

Sureley这种用法没有问题,但我必须说它不易读取,特别是如果代码变得更复杂并且应由未编写此代码的其他人维护。你为什么不简单地让func返回bool?