将函数的整数返回值与 C++ 中的布尔值进行比较
Comparing the integer return value of a function to bool in C++
请考虑以下C++代码片段:
...
if (false == func()) // Line #1
{
...
...
}
int func()
{
...
{
...
return false;
}
...
return true;
}
在上面的代码片段中,函数 func()
的原型指示它返回一个整数。但是在函数func()
内部,它返回 false
或 true
。
同样在第 #1 行中,根据布尔值检查函数 func()
的返回值。
我想知道这种类型的用法是否有任何问题。如果有问题,建议需要做什么整改。
没有问题,任何非零整数都转换为true
,零是false
。相反,bool
可以转换为int
,true
转换为1
,false
转换为0
。
不过,在比较布尔值时,您不需要如此冗长:
if (!func()) { .... }
当然,如果函数只返回 true
或 false
,就像您的示例一样,那么它直接返回 bool
是有意义的:
bool func();
从标准
4.7 积分转换
如果目标类型为 bool,请参阅 4.12。如果源类型为 bool,则值 false 将转换为零,并且 值 true 将转换为 1。
4.12 布尔转换 [conv.bool]
算术、无作用域枚举、指针或指向成员类型的指针的 prvalue 可以转换为 布尔类型的 prvalue 值。零值、空指针值或空成员指针值将转换为 false; 任何其他值都将转换为 true。类型为 std::nullptr_t 的 prvalue 可以转换为 prvalue 布尔型;结果值为假。
在 func
中,您提供的bool
将转换为 int
以供返回。 false
将转换为 0
,true
将转换为 1
。
在比较中,常量false
将转换为 int
,值0
。
通常,如果您选择一个代码,您的代码会读得更好:要么始终使用 bool
类型,要么使用 int
类型和值 0
。
在函数 func(( 中,源类型为 bool,目标类型为 int(因为函数的返回类型为 int(,因此值 false 转换为零,值 true 转换为目标类型的值之一。当返回到第 #1 行时,这个 int 会自动转换为布尔值,因此,由于 func 可以返回 1 或 0,因此值 0 变为 false,1 变为 true。如果 func 返回任何非零值,它将在第 #1 行自动转换为 true。
在"积分转换">和"布尔转换"部分中查看此网站。
Sureley 这种类型的用法没有问题,但我必须说它不容易阅读,特别是如果代码变得更加复杂并且应该由没有编写此代码的其他人维护。你为什么不简单地让 func 返回布尔值?
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 变量定义到C++布尔值转换
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 重载更少,则运算符返回相反的布尔值
- 将此布尔值传递给此函数的最有效方法是什么?
- 如何设置 c++ 类的布尔值?
- 使用 MAKEWORD / MAKEWPARAM 使用布尔值而不是布尔值
- 将 10 个线程与原子布尔值同步
- 创建类似于布尔值的变量类型
- 布尔值向量的基于范围 for 循环
- 零点和布尔值之间的比较
- 简化对两个布尔值的 4 个 if/else 检查
- 无法创建带有布尔值和矢量的地图
- 如何比较多个布尔值以通过特定输出?UE4 C++
- 如何比较类中的布尔值
- 如何比较分配给 #define 的布尔值C++
- 隐含转换为布尔值,并与布尔文字进行比较
- 在比较过程中C++布尔值是否转换为整数
- C++字符串比较返回0,但布尔值返回false
- 将函数的整数返回值与 C++ 中的布尔值进行比较