4

次の単純なコードを想定しています。

for(int i=0; i < 1000; i++)
{
  cout << "Outer i: " << i << endl;
  for(int i=0; i < 12; i++)
  {
    cout << "Inner i:" << i << endl;
  }
}

とてもいい作品。使用される両方のループで同じ変数名が使用され、出力は問題ありません。

両方の変数がスタック上に作成され、外側のループが新しい内側のループになると、新しい「名前空間」(おそらく間違った名前..) が作成されることを正しく理解していますか? しかし、なぜ上書きされるのでしょうか。内側のループの変数に別の名前を選択すると i、外側のループからもアクセスできます。

少し混乱しています。

4

2 に答える 2

6

「名前空間」はちょっと近いですが、それはスコープに関するものです。内側の iは、外側の iを隠したり抑制したりします。別の例を考えることができます:

{ 
 int i=0; //outer scope i.
 {
   int i =0; //this hides the outer scope i.. I can't use outer i here

 }
  i =1 ; //inner i is out of scope.. outer i is set to 1
}
于 2012-11-27T14:27:50.890 に答える
3

あなたの理解は正しいです。コードは技術的に有効です。ただし、この方法には多くの問題があるため、お勧めできません。

forループには、関連付けられた個別のスコープがあります。内側のループで宣言された変数は、外側のループで宣言された変数を隠します。i内側のループから外側にアクセスする方法はありません。

于 2012-11-27T14:27:35.910 に答える