为了账号安全,请及时绑定邮箱和手机立即绑定

对于任何C ++编译器,我可以假设(bool)true ==(int)1吗?

对于任何C ++编译器,我可以假设(bool)true ==(int)1吗?

C++
互换的青春 2019-08-27 18:00:54
对于任何C ++编译器,我可以假设(bool)true ==(int)1吗?我可以假设(bool)true == (int)1任何C ++编译器吗?
查看完整描述

3 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

是。演员表是多余的。在你的表达中:

true == 1

积分促销适用,bool值将提升为a int,此促销必须产生1。

参考:4.7 [conv.integral] / 4:如果源类型是bool... true转换为1。


查看完整回答
反对 回复 2019-08-27
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

Charles Bailey的回答是正确的。C ++标准的确切措辞是(§4.7/ 4):“如果源类型是bool,则将值false转换为零,将值true转换为1。”

编辑:我看到他也添加了参考 - 如果我不分心并忘记,我会很快删除它。

编辑2:然后,值得注意的是,虽然布尔值本身总是转换为零或一,但许多函数(特别是来自C标准库)返回“基本上是布尔”的值,但表示为ints通常只需要为零表示假或非零表示为真。例如,is *函数<ctype.h>只需要零或非零,不一定是零或一。

如果bool将其转换为,则零将转换为false,非零将转换为true(正如您所期望的那样)。


查看完整回答
反对 回复 2019-08-27
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

根据标准,你应该对这个假设是安全的。C ++的bool类有两个值- truefalse与对应值1和0。

需要注意的是将bool表达式和变量与BOOL表达式和变量混合在一起。后者被定义为FALSE = 0TRUE != FALSE,在实践中通常意味着考虑任何不同于0的值TRUE

很多现代编译器实际上会发出隐含试图从施放任何代码的警告BOOLbool,如果该BOOL值大于0或1的不同。


查看完整回答
反对 回复 2019-08-27
  • 3 回答
  • 0 关注
  • 722 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信