()的优先级不大于&&

时间:2015-06-30 05:37:31

标签: c++ operator-precedence

在以下代码中,

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。为什么逻辑&amp;&amp;先于over()?顺便说一下,这段代码的结果是223

2 个答案:

答案 0 :(得分:4)

由于短路:当&&的左侧为false时,不会评估右侧。另一方面,优先级是你认为的方式(并且,正如AnT所说,它与你所看到的行为无关):()优先于{&& 1}}。

(同样,当||的左侧是true时,不评估右侧。)

答案 1 :(得分:1)

  

所有增量操作都应该在执行逻辑操作之前完成

这根本不是真的。在进行逻辑运算之前没有理由进行增量操作,()不会以任何方式改变它。如前所述,运算符优先级评估顺序没有任何关系。这是两个完全不相关的概念。

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

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

此类表达式始终按照从<term1><termN>的严格按照从左到右的顺序进行评估(可能会进行短路评估)。与这些术语中的内容完全无关:在<term2>之前,<term1>内的任何内容都不会被评估。