我可以假设(布尔)真的==(INT)1为任何C + +编译器?
我可以假设(bool)true == (int)1
为任何C + +编译器?
是。 演员是多余的。 在你的表情中:
true == 1
整体推广应用,bool价值将被提升到一个int
,这个提升必须产生1。
参考:4.7 [conv.integral] / 4:如果源types是bool
… true
被转换为一个。
查尔斯·贝利的答案是正确的。 从C ++标准中确切的措辞是(§4.7/ 4):“如果源types是bool,则将false值转换为零,并将true值转换为一个值。
编辑:我看到他也添加了参考 – 我会马上删除,如果我不分心,忘记…
编辑2:然后再次,可能值得注意的是,虽然布尔值本身总是转换为零或一,一些函数(特别是从C标准库)返回的值是“基本上布尔”,但表示为int
s通常只需要为零来指示虚假或非零来表示真实。 例如, <ctype.h>
的is *函数只需要零或非零,不一定是零或一。
如果你把它bool
转换为bool
,则零将转换为false,非零转换为true(如你所期望的)。
根据标准,你应该安全的这个假设。 C ++ bool
types有两个值 – true
和false
,对应的值为1和0。
需要注意的是将bool
expression式和variables与BOOL
expression式和variables混合。 后者被定义为FALSE = 0
和TRUE != FALSE
,这在实践中经常意味着任何不同于0的值都被认为是TRUE
。
如果BOOL
值不是0或1,许多现代编译器实际上会对隐式尝试从BOOL
转换为BOOL
任何代码发出警告。
我发现不同的编译器返回不同的结果。 我还发现,比较一个布尔而不是一个int,几乎总是比较好。 随着程序的发展,这些整数会随着时间的推移而变化,如果你假定为1,那么你的代码中其他地方可能会被一个无关的变化所咬。
不,编译器中的TRUE可以是任意的。 有些将使用1,一些-1(所有位设置,有符号variables),其他编译器可能会使用不同的值。 即使价值标准化,也不是所有编制者都可以遵循标准。
但是,FALSE是所有位都清零的时候,只发生数字值0。