逻辑运算符是否在if语句中相互影响?

Ari*_*dle 4 c++ logical-operators

我有4条语句,如果语句1为真,我只想检查2-4条语句,以下是我尝试实现的伪代码

if (statement 1) {
  if (statement 2 or statement 3 or statement 4){
    do something()
  }
}
Run Code Online (Sandbox Code Playgroud)

我想知道下面的代码是否会这样做

if(s1 && s2 || s3 || s4) {
  doSomething();
}
Run Code Online (Sandbox Code Playgroud)

或者如果我必须这样做

if (s1) {
  if (s2 || s3 || s4) {
     doSomething();
  }
}
Run Code Online (Sandbox Code Playgroud)

Nat*_*ica 8

由于操作员优先

if(s1 && s2 || s3 || s4) 
Run Code Online (Sandbox Code Playgroud)

是相同的

if((s1 && s2) || s3 || s4) 
Run Code Online (Sandbox Code Playgroud)

因为&&它的优先级比更高||。你想要的是

if(s1 && (s2 || s3 || s4)) 
Run Code Online (Sandbox Code Playgroud)

这要是只会是真实的s1是真实的,任何的s2s3以及s4是真实的。

您还保证有短路&&,只要是一个内置的运营商,这意味着,如果s1是假的,s2s3,而s4不会进行评估。||内置运算符也会发生这种情况,一旦您击中一个真表达式,其余的就不会被评估为真或任何事情都是真。