Del*_*lla 2 c++ boolean operators boolean-expression boolean-operations
a [8]是一系列布尔值.我试图计算一个布尔表达式,如下所示.
bool a[8];
.....
bool result=a[0]*(a[3]+a[6]*(a[4]+a[7]*a[5]))+a[1]*(a[6]*a[3]+a[4]+a[7]*a[5])+a[2]*(a[5]+a[7]*(a[4]+a[6]*a[3]));
Run Code Online (Sandbox Code Playgroud)
表达很长,但概念上并不复杂.唯一的错误是,当我用&&替换表达式中的*(在两种情况下我都期望逻辑AND)或用||替换+时,结果似乎不同 (期待逻辑OR).
我不确定哪些是正确的,布尔运算符或乘法,加法等的数学符号.更糟糕的是,没有给出任何错误,即编译器对两者都满意.哪一个更安全,更正确?
他们几乎为同一bool操作数.但是有一些微妙的差异:
*并将类型的类型参数+加宽.boolint
类型表达的a || b是bool,而a + b是int.同上&&和*.
*并且+不是排序点,而是&&和||.
*并且+没有短路,&&而且||是.
它们在运算符优先级表中占据非常不同的位置.因此替换不是直截了当的.
如果a是bool,并且b也是一个bool但不那么初始化的行为a || b被定义,但a + b是未定义由于bool 可以包含在C++陷阱表示.类似的表达可以用来&&和*.
一个很长的链a + b + c + ...可以溢出int类型,其行为是未定义的.
(3)表示a++ * a++未定义的行为但a++ || a++不是.
(这里并未真正相关,但值得注意的是:注意,&&和||,如果他们超载失去他们的短路属性).
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |