15

重複の可能性:
C++ では、for() ループを次のように記述できないのは
なぜですか? for( int i = 1, double i2 = 0; ?

#include <iostream>
using namespace std;

int main()
{
    for (int i = 0, double j = 3.0; i < 10; i++, j+=0.1)
        cout << i << j << endl;
    return 0;
}

for ループ初期化子ブロックに 2 つの宣言があるため、コンパイルされません。

しかし、なぜ?

4

3 に答える 3

50

int初期化で両方が必要な場合double、これを行う1つの方法は、匿名構造体を定義することです! はい、ループ内でも定義できます。C++のあまり知られていない機能のようです。structfor

#include <iostream>

int main()
{
    for( struct {int i; double j;} v = {0, 3.0}; v.i < 10; v.i++, v.j+=0.1)
       std::cout << v.i << "," << v.j << std::endl; 
}

出力:

0,3
1,3.1
2,3.2
3,3.3
4,3.4
5,3.5
6,3.6
7,3.7
8,3.8
9,3.9

オンラインデモ: http://ideone.com/6hvmq

于 2012-06-29T03:53:23.097 に答える
21

C ++文法では、さまざまなデータ型が(関数でない場合)で区切られます。;forループでは、が;見つかると意味が変わります。すなわち

for (<initializations>; <condition>; <next operation>)

他の理由は、すでに複雑な文法の複雑さを回避するためである可能性があります。この機能は許可されていません。

ループスコープで変数を宣言する場合はfor、いつでもその状況をシミュレートできます。

int main()
{
  {
    double j = 3.0;
    for (int i = 0; i < 10; i++, j+=0.1)
        cout << i << j << endl;
  }
    return 0;
}
于 2012-06-29T03:36:08.833 に答える
12

構文はすでに採用されているためです。変数の宣言/定義では、コンマで区切ると、異なるタイプではなく、同じタイプの新しい変数が追加されます。その構文はforループで使用できます。

for ( std::vector<int>::const_iterator it = v.begin(), end = v.end();
      it != end; ++it ) {
   // do something here
}
于 2012-06-29T03:36:31.177 に答える