C ++では、FOR内の変数で宣言できることを知っています。例:
for(int i=0; i<10; i++)
for内で別の変数を宣言する方法はありますか?これは私にはうまくいきません:
for(int i=0, char Ch='J'; i<10; i++)
を使用できますstd::pair
:
for (std::pair<int, char> p(0, 'j'); p.first < 10; p.first++)
{
}
簡単な解決策は、 のすぐ外側にスコープを作成することfor
です。
{
char Ch = 'j';
for (int i = 0; i < 10; i++)
{
}
}
いいえ、あなたがすることはできません。次の方法で実行できます。
char Ch='J';
for(int i=0; i<10; i++)
問題は、異なる型の変数を宣言するには、2 つのステートメントを区切るためにセミコロン ( ) が必要なことです;
。コンマ ( ,
) は同じ型の変数を宣言します。for
ただし、ヘッダーではセミコロンの意味が異なります。
スコープが気になる場合は、ブロックで囲むこともできます。
答えはノーです。foo ループ内で宣言できる型は 1 つだけです。ただし、型は構造体になる可能性があるため、制限には奇妙なハックがあります。
int main()
{
for (struct {int i; char c; } s = {0, 'A'};
s.i < 26; ++s.i, ++s.c) {
std::cout << s.c; // prints the alphabet
}
}
しかし、それは実際にすべきではないことです。ループの前に必要な変数を宣言するだけです:)
int main()
{
{
int i = 0;
char c = 'A';
for (; i < 10; ++i) { /* ...*/ }
}
}
括弧の余分なセットに注意してください。名前が周囲のスコープの変数と衝突する場合は、それらを使用して変数のスコープを制限できます。
はいといいえ。あなたができる間;
は で何でもできる,
ので、次のことが可能です:
for(int i=0, j=10; i<5; ++i,--j) { ... }
;
ただし、異なるタイプの変数が必要な場合、サブ宣言を分離する必要があるため、これを行うことはできません。
C++11 auto でも役に立たないことに注意してください。
#include <iostream>
using namespace std;
int main()
{
for(auto i=0, c = "abcd"; i<3; ++i,++c)
cout << *c;
cout << endl;
return 0;
}
コンパイル エラーが発生します。
inconsistent deduction for 'auto': 'int' and then 'const char*'
別の変数を宣言できますが、同じ型のみです。次のように機能します。
for(int i=0, Ch='J'; i<10; i++)
しかし、Ch
今はint
.
「、」を使用できます。
for(int i=0,x=0; i<x; i++)
...
int i=0 はループの外で実行されると言えます... i の定義はループに入る前に実行されます。
他の変数のデータ型を再宣言することはできません。代わりにこれを試してください。
for(int i = 0, j = 10; i < x; i++) {}