我需要检查node->next != NULL
是否我不知道是否可以写:
if(node!= NULL && node->next!= NULL)
答案 0 :(得分:3)
是的,这是C / C ++的保证行为,正如in this question所述。
同样是一个补充:在C / C ++中,这被称为短路评估,而不是懒惰的评估。
答案 1 :(得分:0)
这与海湾合作委员会无关;评估顺序和短路由语言标准保证。这里是C ++ 11标准的相关部分,草案N3337(强调我的):
5.14逻辑AND运算符
- &&操作员组从左到右。操作数都在上下文中转换为bool类型。如果两个操作数都为真,则结果为true,否则为false。不像&,&&保证从左到右评估:如果第一个操作数为假,则不评估第二个操作数。
- 结果是布尔。如果计算第二个表达式,则在与第二个表达式关联的每个值计算和副作用之前,对与第一个表达式关联的每个值计算和副作用进行排序。
醇>5.15逻辑OR运算符
- ||操作员组从左到右。操作数都在上下文中转换为bool。如果其任一操作数为true,则返回true,否则返回false。与|, ||不同保证从左到右的评估;此外,如果第一个操作数的计算结果为真,则不计算第二个操作数。
- 结果是布尔。如果计算第二个表达式,则在与第二个表达式关联的每个值计算和副作用之前,对与第一个表达式关联的每个值计算和副作用进行排序。
醇>
任何符合标准的编译器都应该这样做。所以,是的,GCC也这样做。