首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较函数的整数返回值与C++中的布尔值

比较函数的整数返回值与C++中的布尔值
EN

Stack Overflow用户
提问于 2013-07-02 14:13:23
回答 4查看 4.7K关注 0票数 2

考虑下面的C++代码片段:

代码语言:javascript
复制
...

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

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

 return true;
} 

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

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

我想知道这种用法有没有问题。如果存在问题,建议需要进行哪些整改。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-07-02 14:15:14

没有问题,任何非零的整数都会转换成true,而零就是false。相反,可以将bool转换为int,将true转换为1,将false转换为0

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

代码语言:javascript
复制
if (!func()) { .... }

当然,如果函数只返回truefalse,那么直接返回bool是有意义的:

代码语言:javascript
复制
bool func();
票数 8
EN

Stack Overflow用户

发布于 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。

票数 2
EN

Stack Overflow用户

发布于 2013-07-02 15:40:47

func中,您提供的bool将转换为int以供返回。false转换为0true转换为1

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

通常,如果您选择其中之一,代码的可读性会更好:要么通篇使用bool类型,要么使用int类型和值0

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17418584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档