そのため、forループの宣言で変数を宣言できるかどうか疑問に思いました。このコードは有効ですか?
for (int a = 0;a < len + 1;a++);
どのスコープにa
存在しますか?forループの外では無効ですか、それともアクセスできますか?
また、1つのforループステートメントで2つの変数を宣言または初期化することは可能ですか?
for (int a = 0, b = len + 1;a < b;a++);
これは有効なステートメントですか?
そのため、forループの宣言で変数を宣言できるかどうか疑問に思いました。このコードは有効ですか?
for (int a = 0;a < len + 1;a++);
どのスコープにa
存在しますか?forループの外では無効ですか、それともアクセスできますか?
また、1つのforループステートメントで2つの変数を宣言または初期化することは可能ですか?
for (int a = 0, b = len + 1;a < b;a++);
これは有効なステートメントですか?
ステートメントの初期化部分( for-init-statementfor
として知られている)はexpression-statementまたはsimple-declarationのいずれかであるため、どちらも完全に有効です。どちらの例も単純な宣言です。2番目の例には2つの宣言子があります。
for-init-statementで宣言された変数のスコープはループfor
自体であるため、for
ループ外では使用できません(§6.5.3/ 3)。
for-init-statementが宣言である場合、宣言された名前のスコープはfor-statementの末尾まで拡張されます。
次に、forループ内で宣言できます。これは、通常の方法です。
通常、そのスコープはforループの{}と同じ長さです。
Visual Studio(他のコンパイラについては不明)は、フラグを設定して、スコープをforループの外側に拡張できます。ただし、そうしないでください。
同じ型である限り、forループの初期化で複数の変数を宣言できます。
どちらも有効ですが、この場合は次のようになります。
for (int a = 0, b = len + 1;a < b;++a);
より速くなります
for (int a = 0;a < len + 1;++a);
len+1は事前に計算されているためです。
for (int a = 0;a < len + 1;a++);
このステートメントの前に「inti」が宣言されていない場合、これはまったく問題ありません。
forループの外側の「a」にアクセスすることはできません。
for (int a = 0, b = len + 1;a < b;a++);
これも問題ありませんが
for (int a = 0;int b = len + 1;a < b;a++);
また
for (int a = 0;double b = len + 1;a < b;a++);
上記のステートメントは両方とも無効です。「comma」を「semicolon」に置き換える必要があります。