私は(非常に簡単な例)この次のコードをお持ちの場合:変数の再宣言:なぜbody内の変数を再宣言するのが禁止されていますが、forループの内部はC++ではありませんか?
#include <iostream>
using namespace std;
int main()
{
int a = 20;
cout << a << endl;
int a = 15;
cout << a << endl;
return 0;
}
それを実行した後、それは次のようなエラーを与えます。私はそれの背後にある理由を完全に理解しています。
が、次のコード(上記と同じ副作用が、異なるが):
int main()
{
int T[2];
T[0] = 20;
T[1] = 15;
for(int g=0; g<2; g++)
{
int a = T[g];
cout << a << endl;
}
}
変数aは、任意の綿毛なしで再宣言され、それが動作します。私は混乱しています、なぜこれが起こりますか?または、これの背後にある理由は、forループのために変数が別のスコープで再宣言されているか、またはその背後に別の正しい理由があるかです。
2番目のバージョンで再宣言される変数はありません。 1つの宣言だけがあります。制御フローが出現するソース行を何度も通過するかどうかは関係ありません。 – Jon
スコープブロック! {}の間にローカルとして宣言されたものはすべて外部からは見えません。ループで...ループの各反復には、そのスコープブロックの独自の "コピー"があります。つまり、あるループのローカルが次のループでは表示されないことを意味します。 – Jonathan
すべての{}で宣言されているすべてのものは、変数が宣言されていれば独自のミニユニバースを持っていますが、宇宙全体(一種の〜ボディ)では何も知られていません。 – DomainFlag