-1
while(true){
    bool flag;
    while(true){
        if (conditions) {
            flag=true; 
            break;
        }
    }
}

この場合、フラグは内部のwhileループを終了した後、false状態にリセットされますか?コンソールの表示から、まだ真の状態にあるように見えます。

4

1 に答える 1

1

いいえ、「リセット」はありません。魔法は一切ありません。実際、flag魔法のように初期化されることすらありませんfalse。自分で初期化する必要があります。

スコープとシャドウイングの典型的な例を考えていると思います。

int a = 4;
//a is 4 here
{
    int a = 3;
    //a is 3 here
}
//a is 4 here

しかし、ここにも魔法はありません。a 名前を共有する2つの異なる変数があります。a内側のブロックは2番目の整数を指します。最初の整数を参照できれば、まったく異なる整数を読み取ることになります。

ここにいくつかの魔法があります:

SomeClass x; //x's constructor is called
{
    SomeOtherClass y; //y's constructor is called
} //y's destructor is called

yは自動であるため、スコープの最後で破棄されます。(aちなみに、2番目もそうですが、それを知る方法はありませんでした。)デストラクタがある場合は、呼び出されます。そのデストラクタが「フラグをリセットする」などの凝ったことをすると、結果が表示されます。(通過しないyでください。これはなくなります。)

{}if / while / function/etcがないという事実。それらに添付されていることは関係ありません。

于 2013-01-28T00:59:45.990 に答える