-1

そのため、forループの宣言で変数を宣言できるかどうか疑問に思いました。このコードは有効ですか?

for (int a = 0;a < len + 1;a++);

どのスコープにa存在しますか?forループの外では無効ですか、それともアクセスできますか?

また、1つのforループステートメントで2つの変数を宣言または初期化することは可能ですか?

for (int a = 0, b = len + 1;a < b;a++);

これは有効なステートメントですか?

4

5 に答える 5

6

ステートメントの初期化部分( for-init-statementforとして知られている)はexpression-statementまたはsimple-declarationのいずれかであるため、どちらも完全に有効です。どちらの例も単純な宣言です。2番目の例には2つの宣言子があります。

for-init-statementで宣言された変数のスコープはループfor自体であるため、forループ外では使用できません(§6.5.3/ 3)。

for-init-statementが宣言である場合、宣言された名前のスコープはfor-statementの末尾まで拡張されます。

于 2012-12-26T23:32:51.837 に答える
2

次に、forループ内で宣言できます。これは、通常の方法です。

通常、そのスコープはforループの{}と同じ長さです。

Visual Studio(他のコンパイラについては不明)は、フラグを設定して、スコープをforループの外側に拡張できます。ただし、そうしないでください。

同じ型である限り、forループの初期化で複数の変数を宣言できます。

于 2012-12-26T23:33:47.407 に答える
1

forはい、ループにスコープされているため、ループ外では無効になりforます。はい、それも有効な宣言です。

動作していると動作していない

于 2012-12-26T23:31:47.837 に答える
1

どちらも有効ですが、この場合は次のようになります。

for (int a = 0, b = len + 1;a < b;++a);

より速くなります

for (int a = 0;a < len + 1;++a);

len+1は事前に計算されているためです。

于 2012-12-26T23:45:52.437 に答える
-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」に置き換える必要があります。

于 2021-01-21T15:11:33.493 に答える