我正在观看Mojam(现场游戏编程,HumbleBundle),我在那里看到了这段代码
(here是代码截图)
我想知道为什么条件表达式在最后一个if语句(它是!wasmoving && ismoving
)的计算结果为真(确实如此,程序员编译它并且动画正在运行)。
我在我的编译器中试过这个
#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;
}
当然,如果最后一个if采用虚假路径,则没有任何反应。 任何人都可以解释截图中的代码是如何工作的吗?
答案 0 :(得分:4)
请注意,在屏幕截图中,ismoving
变量在复制到wasmoving
后更新,因此ismoving
的值完全有可能在评估条件时,它与wasmoving
的值不同。
答案 1 :(得分:1)
您对屏幕截图中的代码进行转换是不准确的。您已更改操作的顺序。
与大多数主流编程语言一样,C ++和Java是“命令式”语言。这意味着程序由一个接一个地执行的指令序列组成。当该代码执行时:boolean wasJumping = isJumping;
isJumping = ...someCalculation...;
first 将wasJumping的值设置为isJumping的当前值,然后将isJumping的值更改为其他值。 wasJumping没有改变 - 它仍然具有从isJumping中获取的旧值。
如果你来自数学背景,这可能会令人困惑。我发现阅读“wasJumping = isJumping”有助于“wasJumping 变成等于isJumping”,而不是“wasJumping equals isJumping”。前者强调它描述变量中的更改,而不是描述两个值之间的永久关系。