Этот код пытается использовать ярлык для оценки, но он не работает.
(код неверен)
Во-первых, позвольте мне показать, что это такое означало сделать:
Код должен был выглядеть так:
bool func() {
bool ret = true;
ret = ret && test1();
homemade_assert_like_function(ret == true);
ret = ret && test2();
homemade_assert_like_function(ret == true);
return ret;
}
Важной частью является то, что если ret
уже false
, указывая, что результат не удался Он даже не попытается оценить вторую часть выражения! (test1()
или test2()
).
Если функция test()
имеет какие-либо побочные эффекты, она не будет запускаться, если флаг ret
указывает на сбой.
Это полезно для прохождения длинного многошагового процесса (test1()
... testN()
) и не выполнения какой-либо работы после сбоя одного шага.
Теперь, что это за код на самом деле делает, и почему?
ret
начинается как true
, и как только одна из функций выходит из строя, ret становится false и застревает на false (пока операция выполняется всегда &=
.
Но, в отличие от того, что я написал выше, каждая функция, test1()
, test2()
, testN()
, все равно запускается (включая побочные эффекты), даже если предыдущий тест уже не удалось!
Это ничем не отличается от того, что если бы они только что написали код как:
bool func() {
bool ret = true;
ret = test1();
homemade_assert_like_function(ret == true);
ret = test2();
homemade_assert_like_function(ret == true);
return ret;
}
Большое отличие от кода, который вы предлагаете, заключается в том, что ваш код всегда возвращает true
. Как вы можете предположить, что каждый тест прошел успешно? Коду должно быть разрешено возвращать false
, если тест не пройден s. Вы удалили эту функцию из своей версии кода.