逻辑运算符在 if 语句中是否相互影响?
Do logical operators affect each other in a if statement?
我有 4 个陈述,如果陈述 1 为真,我只想检查陈述 2-4
以下是我想要实现的伪代码
if (statement 1) {
if (statement 2 or statement 3 or statement 4){
do something()
}
}
我想知道下面的代码是否会做同样的事情
if(s1 && s2 || s3 || s4) {
doSomething();
}
或者如果我必须这样做的话
if (s1) {
if (s2 || s3 || s4) {
doSomething();
}
}
if(s1 && s2 || s3 || s4)
与
相同
if((s1 && s2) || s3 || s4)
因为 &&
的优先级高于 ||
。你要的是
if(s1 && (s2 || s3 || s4))
仅当 s1
为真且 s2
、s3
和 s4
中的任何一个为真时才为真。
你也在 guaranteed to have short circuiting 上 &&
只要它是内置运算符,这意味着如果 s1
为假,s2
,s3
和 s4
将不会被评估。对于内置运算符,||
也会发生这种情况,一旦您遇到一个 true 表达式,其余表达式就不会被评估为 true 或任何东西都为 true。
在 C++ 中,逻辑运算符 &&
和 ||
是短路的 - 这意味着运算符的左操作数将首先被评估,如果结果不是受到进一步评估的影响,然后它会停在那里。例如,如果 x()
为真,x() && y()
确实只会计算 y()
,如果 x()
为假,x() || y()
只会计算 y()
。
作为建议,您应该注意在事物周围加上括号,以更清楚地表明您想要的操作顺序:
s1 && (s2 || s3 || s4)
而不是
s1 && s2 || s3 || s4
您需要在 ||
语句中加上括号。所以:
if(s1 && (s2 || s3 || s4)) { // << note the parenthesis
doSomething();
}
等同于
if (s1) {
if (s2 || s3 || s4) {
doSomething();
}
}
这是因为短路评估。基本上,如果 s1 为假,则不会评估括号。你可以阅读它 here.
我有 4 个陈述,如果陈述 1 为真,我只想检查陈述 2-4 以下是我想要实现的伪代码
if (statement 1) {
if (statement 2 or statement 3 or statement 4){
do something()
}
}
我想知道下面的代码是否会做同样的事情
if(s1 && s2 || s3 || s4) {
doSomething();
}
或者如果我必须这样做的话
if (s1) {
if (s2 || s3 || s4) {
doSomething();
}
}
if(s1 && s2 || s3 || s4)
与
相同if((s1 && s2) || s3 || s4)
因为 &&
的优先级高于 ||
。你要的是
if(s1 && (s2 || s3 || s4))
仅当 s1
为真且 s2
、s3
和 s4
中的任何一个为真时才为真。
你也在 guaranteed to have short circuiting 上 &&
只要它是内置运算符,这意味着如果 s1
为假,s2
,s3
和 s4
将不会被评估。对于内置运算符,||
也会发生这种情况,一旦您遇到一个 true 表达式,其余表达式就不会被评估为 true 或任何东西都为 true。
在 C++ 中,逻辑运算符 &&
和 ||
是短路的 - 这意味着运算符的左操作数将首先被评估,如果结果不是受到进一步评估的影响,然后它会停在那里。例如,如果 x()
为真,x() && y()
确实只会计算 y()
,如果 x()
为假,x() || y()
只会计算 y()
。
作为建议,您应该注意在事物周围加上括号,以更清楚地表明您想要的操作顺序:
s1 && (s2 || s3 || s4)
而不是
s1 && s2 || s3 || s4
您需要在 ||
语句中加上括号。所以:
if(s1 && (s2 || s3 || s4)) { // << note the parenthesis
doSomething();
}
等同于
if (s1) {
if (s2 || s3 || s4) {
doSomething();
}
}
这是因为短路评估。基本上,如果 s1 为假,则不会评估括号。你可以阅读它 here.