7

for ループで同じ型の 2 つの変数を定義できます。

int main() {
  for (int i = 0, j = 0; i < 10; i += 1, j = 2*i) {
    cout << j << endl;
  }
}

しかし、異なる型の変数を定義することは違法です:

int main() {
  for (int i = 0, float j = 0.0; i < 10; i += 1, j = 2*i) {
    cout << j << endl;
  }
}

これを行う方法はありますか?i(ループ内で使用する必要はありません。ただj.)

あなたが完全にハッキングされたあいまいな解決策を持っているなら、それは私にとっては問題ありません.

この不自然な例ではdouble、両方の変数に使用できることがわかっています。私は一般的な答えを探しています。

変数のいずれかを for 本体の外に移動することは提案しないでください。ループの直後に消えなければならない反復子であり、for ステートメントをforeachマクロに含める必要があるため、おそらく私には使用できません。

#define foreach(var, iter, instr) {                  \
    typeof(iter) var##IT = iter;                     \
    typeof(iter)::Element var = *var##IT;            \
    for (; var##_iterIT.is_still_ok(); ++var##IT, var = *var#IT) {  \
      instr;                                         \
    }                                                \
  }

次のように使用できます。

foreach(ii, collection, {
  cout << ii;
}). 

しかし、私はそのように使用されるものが必要です:

foreach(ii, collection)
  cout << ii;

ランタイム オーバーヘッドが発生しないようにしてください (ただし、コンパイルが遅くなる可能性があります)。

4

13 に答える 13

5

これも醜いですが、forループでいくつかの名前とタイプを持つ複数の変数を宣言するための一般的な方法も提供します

int main() {
  for (struct { int i; float j; } x = { };
       x.i < 10; x.i += 1, x.j = 2 * x.i) {
    cout << x.j << endl;
  }
}
于 2009-05-20T16:49:54.117 に答える