我有一个C++中的if块,如下所示:
if( node != NULL && node->next !=NULL ){
//do some stuff
}
请问我是否需要将node和node->next分别放入两个if块中?或者保证在执行node->next!=NULL之前,先执行node!=NULL吗?这与IT技术有关。
我有一个C++中的if块,如下所示:
if( node != NULL && node->next !=NULL ){
//do some stuff
}
请问我是否需要将node和node->next分别放入两个if块中?或者保证在执行node->next!=NULL之前,先执行node!=NULL吗?这与IT技术有关。
这是一个短路求值,操作符&&保证左边的表达式在右边之前被完全求值
来自标准:
5.14 逻辑与操作符 [expr.log.and]
logical-and-expression:
inclusive-or-expression
logical-and-expression && inclusive-or-expression
不需要这样做。node!=NULL 会先执行,如果为假,则不会评估其余条件。
operator&&
(在这种情况下,它是operator!=
的结果,它是一个bool
,因此您可以相信operator&&
未被重载),它将短路并按预期工作。如果有人重载了operator&&
,它就失去了短路的能力。 - YoungJohn