GCC默认是否进行延迟评估?

时间:2014-07-03 12:39:37

标签: c++ gcc short-circuiting

我需要检查node->next != NULL是否我不知道是否可以写:

if(node!= NULL && node->next!= NULL)

2 个答案:

答案 0 :(得分:3)

是的,这是C / C ++的保证行为,正如in this question所述。

同样是一个补充:在C / C ++中,这被称为短路评估,而不是懒惰的评估。

答案 1 :(得分:0)

这与海湾合作委员会无关;评估顺序和短路由语言标准保证。这里是C ++ 11标准的相关部分,草案N3337(强调我的):

  

5.14逻辑AND运算符

     
      
  1. &&操作员组从左到右。操作数都在上下文中转换为bool类型。如果两个操作数都为真,则结果为true,否则为false。不像&,&&保证从左到右评估:如果第一个操作数为假,则不评估第二个操作数
  2.   
  3. 结果是布尔。如果计算第二个表达式,则在与第二个表达式关联的每个值计算和副作用之前,对与第一个表达式关联的每个值计算和副作用进行排序。
  4.         

    5.15逻辑OR运算符

         
        
    1. ||操作员组从左到右。操作数都在上下文中转换为bool。如果其任一操作数为true,则返回true,否则返回false。与|, ||不同保证从左到右的评估;此外,如果第一个操作数的计算结果为真,则不计算第二个操作数。
    2.   
    3. 结果是布尔。如果计算第二个表达式,则在与第二个表达式关联的每个值计算和副作用之前,对与第一个表达式关联的每个值计算和副作用进行排序。
    4.   

任何符合标准的编译器都应该这样做。所以,是的,GCC也这样做。