() 的优先级不大于 &&

precedence of () is not greater than &&

在下面的代码中,

int main() {
    int a =1, b = 2, c = 3;
    if(((a++) == 5) && ((b++) == 5) && ((c++) == 5)) {
        cout<<"inside if"<< endl; // prints !!!Hello World!!!
    }
    cout<<a<<b<<c<<endl;
    return 0;
}

所有的自增操作都应该在逻辑操作之前完成。但是执行会跳过增量 b 和 c。为什么逻辑 && 优先于 ()?顺便说一下,这段代码的结果是 223.

由于短路:当&&左边为false时,右边不计算。另一方面,优先级是您认为应该的方式(并且,正如 AnT 所说,它与您所看到的行为无关):() 优先于 &&.

(同理,当||左边为true时,右边不计算)

all increment operation should be done before doing logical operation

这根本不是真的。没有理由在执行逻辑操作之前完成增量操作,并且 () 不会以任何方式改变它。正如之前多次声明的那样,运算符优先级求值顺序 没有任何关系。这是两个完全不相关的概念。

在顶层,您的表达式具有以下结构

<term1> && <term2> && <term3> && ... && <termN>

此类表达式始终按照从 <term1><termN> 的从左到右的严格顺序进行求值(可能存在短路求值)。这些术语中的内容完全无关紧要:<term2> 中的任何内容都不会在 <term1>.

之前进行评估