对于任何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。
喵喵时光机
TA贡献1846条经验 获得超7个赞
Charles Bailey的回答是正确的。C ++标准的确切措辞是(§4.7/ 4):“如果源类型是bool,则将值false转换为零,将值true转换为1。”
编辑:我看到他也添加了参考 - 如果我不分心并忘记,我会很快删除它。
编辑2:然后,值得注意的是,虽然布尔值本身总是转换为零或一,但许多函数(特别是来自C标准库)返回“基本上是布尔”的值,但表示为int
s通常只需要为零表示假或非零表示为真。例如,is *函数<ctype.h>
只需要零或非零,不一定是零或一。
如果bool
将其转换为,则零将转换为false,非零将转换为true(正如您所期望的那样)。
芜湖不芜
TA贡献1796条经验 获得超7个赞
根据标准,你应该对这个假设是安全的。C ++的bool
类有两个值- true
和false
与对应值1和0。
需要注意的是将bool
表达式和变量与BOOL
表达式和变量混合在一起。后者被定义为FALSE = 0
和TRUE != FALSE
,在实践中通常意味着考虑任何不同于0的值TRUE
。
很多现代编译器实际上会发出隐含试图从施放任何代码的警告BOOL
到bool
,如果该BOOL
值大于0或1的不同。
- 3 回答
- 0 关注
- 722 浏览
添加回答
举报
0/150
提交
取消