Да (будет возвращено true
независимо от заказа).Условия в or
оцениваются слева направо, и когда наткнулся на первое true
, все условие возвращает true
.
В вашем примере:
return (CanMeasure(weight + availableWeights[index], availableWeights, index + 1) ||
CanMeasure(weight - availableWeights[index], availableWeights, index + 1) ||
CanMeasure(weight, availableWeights, index + 1));
не все условия оцениваются обязательно.Если первый из них оценивается как true
, остальные не будут выполняться, а функция просто вернет true
.
Это называется коротким замыканием.
Давайте посмотрим на некоторыенезаполненный код:
if ( foo() || goo() )
0041152E call foo (41111Dh)
00411533 movzx eax,al
00411536 test eax,eax
00411538 jne wmain+36h (411546h)
0041153A call goo (4111A9h)
0041153F movzx eax,al
00411542 test eax,eax
00411544 je wmain+49h (411559h)
В этом примере foo()
и goo()
являются обеими функциями, возвращающими bool.
Инструкция
00411538 jne wmain+36h (411546h)
сообщает среде выполнениявыпрыгнуть из условия, если foo()
оценено как true.
Этот код не оптимизирован, поэтому это не функция оптимизации.