Pet*_*uza 111 c++ casting boolean
我可以假设(bool)true == (int)1
任何C++编译器吗?
CB *_*ley 128
是.演员表是多余的.在你的表达中:
true == 1
Run Code Online (Sandbox Code Playgroud)
积分促销适用,bool值将提升为a int
,此促销必须产生1.
参考:4.7 [conv.integral]/4:如果源类型是bool
... true
转换为1.
Jer*_*fin 18
Charles Bailey的回答是正确的.C++标准的确切措辞是(§4.7/ 4):"如果源类型是bool,则将值false转换为零,将值true转换为1."
编辑:我看到他也添加了参考 - 如果我不分心并忘记,我会很快删除它.
编辑2:然后,值得注意的是,虽然布尔值本身总是转换为零或一,但许多函数(特别是来自C标准库)返回"基本上是布尔"的值,但表示为int
s通常只需要为零表示假或非零表示为真.例如,is*函数<ctype.h>
只需要零或非零,不一定是零或一.
如果bool
将其转换为,则零将转换为false,非零将转换为true(正如您所期望的那样).
根据标准,你应该对这个假设是安全的.C++的bool
类有两个值- true
和false
与对应值1和0.
需要注意的是将bool
表达式和变量与BOOL
表达式和变量混合在一起.后者被定义为FALSE = 0
和TRUE != FALSE
,在实践中通常意味着考虑任何不同于0的值TRUE
.
很多现代编译器实际上会发出隐含试图从施放任何代码的警告BOOL
到bool
,如果该BOOL
值大于0或1的不同.
我发现不同的编译器在 true 上返回不同的结果。我还发现,比较 bool 与 bool 而不是 int 几乎总是更好。随着程序的发展,这些整数的值往往会随着时间的推移而改变,如果你假设 true 为 1,那么你可能会受到代码中其他地方不相关的更改的影响。
归档时间: |
|
查看次数: |
99943 次 |
最近记录: |