我可以假设(布尔)真的==(INT)1为任何C + +编译器?

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

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

 true == 1 

整体推广应用,bool价值将被提升到一个int ,这个提升必须产生1。

参考:4.7 [conv.integral] / 4:如果源types是booltrue被转换为一个。

查尔斯·贝利的答案是正确的。 从C ++标准中确切的措辞是(§4.7/ 4):“如果源types是bool,则将false值转换为零,并将true值转换为一个值。

编辑:我看到他也添加了参考 – 我会马上删除,如果我不分心,忘记…

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

如果你把它bool转换为bool ,则零将转换为false,非零转换为true(如你所期望的)。

根据标准,你应该安全的这个假设。 C ++ booltypes有两个值 – truefalse ,对应的值为1和0。

需要注意的是将boolexpression式和variables与BOOLexpression式和variables混合。 后者被定义为FALSE = 0TRUE != FALSE ,这在实践中经常意味着任何不同于0的值都被认为是TRUE

如果BOOL值不是0或1,许多现代编译器实际上会对隐式尝试从BOOL转换为BOOL任何代码发出警告。

我发现不同的编译器返回不同的结果。 我还发现,比较一个布尔而不是一个int,几乎总是比较好。 随着程序的发展,这些整数会随着时间的推移而变化,如果你假定为1,那么你的代码中其他地方可能会被一个无关的变化所咬。

不,编译器中的TRUE可以是任意的。 有些将使用1,一些-1(所有位设置,有符号variables),其他编译器可能会使用不同的值。 即使价值标准化,也不是所有编制者都可以遵循标准。

但是,FALSE是所有位都清零的时候,只发生数字值0。