私はC ++が初めてで、これに出くわしました:
for (int i=0 ; i<500 ; i++) {
//to do
}
int i;
std::cin >> i;
更新: Visual Studio 2010 (およびそれが使用するコンパイラ) を使用すると、for ループの外側の i の値は、cin >> i; の呼び出し後に 500 になります。Visual Studio デバッガー << を使用して値を見ています (これが問題です - Greg に感謝します)
今私は期待した
a) int i; for ループと int i=0; の外側。異なる変数、つまり for ループ i は中かっこが閉じると範囲外になります
b) それが範囲外に出ていないことに気づいたら、なぜ cin によって上書きされないのか疑問に思いました。
b) は意図的なものだと思います (ただし、Bjarne Stroustrup の C++ に関する本でそのページを見つけるのに苦労しています) が、同じ本の中で、変数はそれらが囲まれた中括弧内にスコープを持つと述べていると確信しています。
他のほとんどの言語では、for コンストラクトで変数を宣言するときに、for ループの中括弧内にあると見なされることを知っていますが、C++ ではそうではないようです。
これは当てはまりますか、これはforループに固有のものですか、それともこれが発生する他のケースはありますか(他には考えられませんが、私は新しいです)
ありがとう