私の C++ 仕様の理解によると (ドラフト標準オンラインによると)、for ループは while ループと初期化用のブロックの観点から書き直すことができます。私の理解では、for ループの繰り返しステートメントは本体と同じスコープで発生するため、for ループの本体で宣言された変数を使用できるはずです。gcc と clang の両方が、次の (不自然な) コードを拒否します。これは、実際のコードを簡略化したものです。
ループの外で j を宣言することで明らかにコードを修正できますが、なぜ j は以下の範囲外なのでしょうか?
int main()
{
for(int i=0; i<10; i=j) int j=i+1;
// // I must misunderstand the standard because I thought the above loop is
// // equivalent to the commented code below where j is clearly in scope.
// {
// int i=0;
// while(i<10) {
// int j=i+1;
// i=j;
// }
// }
return 0;
}
clang (および gcc) によると、これは無効です。
test.cpp:3:26: error: use of undeclared identifier 'j'
for(int i=0; i<10; i=j) int j=i+1;
^
1 error generated.