首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C++中布尔数据类型的比较

C++中布尔数据类型的比较
EN

Stack Overflow用户
提问于 2019-05-20 17:42:14
回答 3查看 4.4K关注 0票数 17

bool数据类型通常表示为0 (如false)和1 (如true)。但是,有些人说true值可以用1以外的值来表示。如果后面的语句为true,则以下表达式可能不正确。

代码语言:javascript
复制
bool x = 1;
if (x==1)
    Do something..

我想知道下面的语句在常用的编译器上是否能像预期的那样工作。

if () Do something..

  1. bool x= 1;if (x==1) Do something.
  2. bool y= 0;if(
  3. ) Do something...

z= 1;if (y>0.5) Do something..

  • bool z=1;if(x==1)Do something.

  • bool y=0
EN

回答 3

Stack Overflow用户

发布于 2019-05-20 17:45:34

if (x==1)没有错误。当您将布尔值转换为数值类型时,所有真值表示形式都将转换为1。

给定bool z=trueif(z>0.5)将为真,因为1.0大于0.5。

票数 6
EN

Stack Overflow用户

发布于 2019-05-20 18:32:28

bool只有两个值,分别是truefalse10是整型文字,因此可以将它们转换为bool。您必须考虑到转换在两个方向上都有效,但您不一定会得到相同的整数:

代码语言:javascript
复制
int a = 5;
bool b = a; // int -> bool conversion
int c = b;  // bool -> int conversion
std::cout << a << " " c;

打印:

代码语言:javascript
复制
5 1

0以外的任何整数值都会转换为true,但true始终会转换为1

记住这一点,您的所有示例都将按预期工作。但是,请注意,bool的主要用途是我们可以在代码中使用truefalse,而不必将数字作为01的特殊含义。显式总是更好,所以当你说true时,你最好写true而不是1

票数 4
EN

Stack Overflow用户

发布于 2021-02-24 15:58:24

这里的一个相关问题是“为什么我们甚至允许在boolint之间进行比较?”

答案是向后兼容和折衷,因为C和C++过去推荐使用整数来存储布尔值。所以有很多代码

尽管有新的语言规则,

  1. 仍应继续工作,例如关系运算符返回布尔值而不是整型值。
  2. 允许您通过更改布尔变量的声明来升级旧代码,而只需对其余代码进行最少的后续更改。

在这方面,其他语言可能更干净,但是bool类型显然是成功的。

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

https://stackoverflow.com/questions/56218225

复制
相关文章

相似问题

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