感觉如何 - 有可能有效

时间:2013-02-22 12:56:35

标签: c++ if-statement boolean boolean-logic boolean-operations

我正在观看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采用虚假路径,则没有任何反应。 任何人都可以解释截图中的代码是如何工作的吗?

2 个答案:

答案 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”。前者强调它描述变量中的更改,而不是描述两个值之间的永久关系。