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

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

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



互换的青春
浏览 725回答 3
3回答

元芳怎么了

是。演员表是多余的。在你的表达中:true == 1积分促销适用,bool值将提升为a int,此促销必须产生1。参考:4.7 [conv.integral] / 4:如果源类型是bool... true转换为1。

喵喵时光机

Charles Bailey的回答是正确的。C ++标准的确切措辞是(§4.7/ 4):“如果源类型是bool,则将值false转换为零,将值true转换为1。”编辑:我看到他也添加了参考 - 如果我不分心并忘记,我会很快删除它。编辑2:然后,值得注意的是,虽然布尔值本身总是转换为零或一,但许多函数(特别是来自C标准库)返回“基本上是布尔”的值,但表示为ints通常只需要为零表示假或非零表示为真。例如,is *函数<ctype.h>只需要零或非零,不一定是零或一。如果bool将其转换为,则零将转换为false,非零将转换为true(正如您所期望的那样)。

芜湖不芜

根据标准,你应该对这个假设是安全的。C ++的bool类有两个值-&nbsp;true和false与对应值1和0。需要注意的是将bool表达式和变量与BOOL表达式和变量混合在一起。后者被定义为FALSE = 0和TRUE != FALSE,在实践中通常意味着考虑任何不同于0的值TRUE。很多现代编译器实际上会发出隐含试图从施放任何代码的警告BOOL到bool,如果该BOOL值大于0或1的不同。
打开App,查看更多内容
随时随地看视频慕课网APP