如果条件在C ++中执行顺序

时间:2014-09-04 18:48:53

标签: c++ if-statement execute

我在C ++中有一个if块,如下所示:

if( node != NULL && node->next !=NULL ){
    //do some stuff
}

任何人都可以告诉我,我需要拆分节点和节点 - >接下来两个if块吗?或者是它 保证节点!= NULL将在node-> next!= NULL之前执行?

4 个答案:

答案 0 :(得分:13)

这是short circuit评估和操作员&&保证在评估右侧之前完全评估左侧表达式

从标准来看:

  

5.14逻辑AND运算符[expr.log.and]

logical-and-expression: 
      inclusive-or-expression
      logical-and-expression && inclusive-or-expression 
     
      
  1. &&运营商组从左到右。该   操作数都在上下文中转换为bool(第4条)。该   如果两个操作数都为真,则结果为true,否则为false。不像   &,&&保证从左到右的评估:第二个操作数不是   评估第一个操作数是否为false。
  2.   
  3. 结果是布尔。如果   评估第二个表达式,每个值计算和侧面   与第一个表达相关的效应在每个表达之前排序   值计算和与第二个相关的副作用   表达
  4.   

答案 1 :(得分:2)

不,你没有。 &&运算符短路;如果左操作数的计算结果为false,则根本不评估右操作数,因为结果已知。 (类似地,当左操作数为真时,||运算符不会计算右操作数。)

答案 2 :(得分:0)

你不需要。 node!= NULL将首先执行,如果为false,则不会评估其余条件。

答案 3 :(得分:0)

如果第一个条件为假,则不会评估第二个条件,因为在任何情况下,完整表达式将等于假,而不考虑第二个条件的评估结果。

根据C ++标准

  

1&&操作员组从左到右。操作数都是   在上下文中转换为bool(第4条)。如果两者都是如此   操作数是真的,否则是假的。不像&,&&担保   从左到右的评估:第二个操作数是否被评估   第一个操作数是假的。