0

私はMojam(ライブゲームプログラミング、HumbleBundleで)を見ています、そしてそこでこのコードを見ました(これはコードスクリーンショットです)私はステートメント(これは!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;
}

そしてもちろん、最後のifが誤ったパスをとった場合、何も起こりません。スクリーンショットのコードがどのように機能する可能性があるかを誰かが説明できますか?

4

2 に答える 2

4

ismovingスクリーンショットでは、変数はにコピーされた後に更新されることに注意してください。そのため、条件が評価されるまでに の値が の値と異なるwasmoving可能性は十分にあります。ismovingwasmoving

于 2013-02-22T13:00:14.370 に答える
1

スクリーンショットからのコードの変換は不正確です。操作の順序を変更しました。

C ++とJavaは、ほとんどの主流のプログラミング言語と同様に、「命令型」言語です。これは、プログラムが次々に実行される一連の命令で構成されていることを意味します。そのコードが行う場合:

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

これにより、最初にwasJumpingの値がisJumpingの現在の値に設定され、次にisJumping値が別の値に変更されます。wasJumpingは変更されません-isJumpingから取得された古い値がまだあります。

あなたが数学的なバックグラウンドから来ている場合、これは混乱する可能性があります。「wasJumpingはisJumpingに等しい」ではなく、「wasJumpingがisJumpingに等しくなる」として、「wasJumping=isJumping」を読むと役立つことがわかりました。前者は、2つの値の間の永続的な関係を説明するのではなく、変数の変更を説明することを強調しています。

于 2013-02-22T13:03:13.953 に答える