while(true){
bool flag;
while(true){
if (conditions) {
flag=true;
break;
}
}
}
この場合、フラグは内部のwhileループを終了した後、false状態にリセットされますか?コンソールの表示から、まだ真の状態にあるように見えます。
いいえ、「リセット」はありません。魔法は一切ありません。実際、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がないという事実。それらに添付されていることは関係ありません。