Будет ли в данной ситуации программа высчитывать 1 == 1 ? или же увидит что везде стоят && и дойдя до первого false выйдет из функции со значением false?
К логическим выражениям применяется схема так называемой "короткой оценки", то есть, вычисление выражения прекращается в тот момент, когда можно точно оценить результат выражения.
|
Добрый день.
Прошу прощенья если уже разжовывалось.
Вопрос по логике действия программы:
Функция для конкретики:
bool TestFunc(void)
{
return (true && false && (1 == 1) && true);
}
Будет ли в данной ситуации программа высчитывать 1 == 1 ? или же увидит что везде стоят && и дойдя до первого false выйдет из функции со значением false?
void OnStart() { for(int i = 1; i <= 10; i++) Print("test ", i, ", result ", test()); } bool test() { return f1() && (f2() == f3()) && f4(); } bool f1() { Print(__FUNCTION__); return bool(MathRand() % 2); } bool f2() { Print(__FUNCTION__); return bool(MathRand() % 2); } bool f3() { Print(__FUNCTION__); return bool(MathRand() % 2); } bool f4() { Print(__FUNCTION__); return bool(MathRand() % 2); }
Благодарю, за наглядный ответ. А то голову ломал как бы это проверить. Причем видно что расчет функций идет по порядку строго слева на право. То есть с точки зрения оптимизации программы тяжелые для вычисления функции лучше оставлять справа, так как до них очередь может вообще не дойти.
Не только тяжёлые для вычисления. Ещё и наиболее вероятные условия, первыми проверяя наименее вероятные.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день.
Прошу прощенья если уже разжовывалось.
Вопрос по логике действия программы:
Функция для конкретики:
bool TestFunc(void)
{
return (true && false && (1 == 1) && true);
}
Будет ли в данной ситуации программа высчитывать 1 == 1 ? или же увидит что везде стоят && и дойдя до первого false выйдет из функции со значением false?