смысл если — как это возможно, что работает

Я смотрю Mojam (живое программирование игр, на HumbleBundle) и я увидел этот кусок кода там
(Вот это скриншот кода)
Мне интересно, как получилось выражение условия в последнем операторе if (который !wasmoving && ismoving) всегда оценивается как true (да, программист скомпилировал его и анимация была запущена).
Я пробовал это в моем компиляторе

#include <iostream>
#include <cstdlib>
using namespace std;
int main(){
bool ismoving=5>0;
bool wasmoving=ismoving;
cout << "ismoving"<< ismoving << " oraz wasmoving " << wasmoving << endl;
if (!wasmoving && ismoving) cout << "1st = true 2nd = true" << endl;
system("PAUSE");
return 0;
}

и, конечно, если последний, если идет по ложному пути, ничего не происходит.
Кто-нибудь может объяснить, как это возможно, что код из скриншота работал?

0

Решение

Обратите внимание, что на скриншоте ismoving переменная обновлена после оно копируется в wasmovingтак что вполне возможно, что значение ismoving отличается от значения wasmoving к моменту оценки состояния

4

Другие решения

Ваше преобразование кода со скриншота является неточным. Вы изменили порядок операций.

C ++ и Java, как и большинство основных языков программирования, являются «императивными» языками. Это означает, что программы состоят из последовательностей инструкций, которые выполняются одна за другой. Когда этот код делает:

boolean wasJumping = isJumping;
isJumping = ...someCalculation...;

Тот первый устанавливает значение wasJumping равным текущему значению isJumping, затем изменения значение isJumping к чему-то другому. wasJumping не изменяется — он все еще имеет старое значение, которое было взято из isJumping.

Если вы пришли из математического фона, это может сбить с толку. Я считаю, что это помогает читать «wasJumping = isJumping» как «wasJumping» становится равно isJumping «, а не» wasJumping равно isJumping «. Первое подтверждает, что это описывает менять в переменной, а не описывать постоянные отношения между двумя значениями.

1