2

最初は、次のようなことが許可されているかどうかを試してみたかった:

vector<int> a{1, 2};
vector<int> b{3, 4};

for(auto ai : a, auto bi : b)
{

}

これはうまくいきませんでしたが、サイズの制約のために期待していました。

しかし、これもうまくいかないことに驚きました:

vector<int> b{3, 4};

for(int x = 1, auto bi : b)
{

}

コンマ演算子は、右側に進む前に左側のすべての副作用を解決することを意図していませんか?

4

2 に答える 2

4

2 番目のケースでは、宣言があります。宣言には、コンマで区切られた複数の変数の宣言を含めることができます。

2番目のケースで書いていることは、次の宣言と同等です

int x = 1, auto bi;

for (...) ...

最初の方法が機能しなかった理由は、サイズの制約のためではなく、範囲forループの構文が原因で、そのようなことを行うことができません。

于 2013-11-19T11:10:21.923 に答える
2

コンマ演算子は演算子です。つまり、式でのみ使用できます。int x = 1, auto bi : b絶対に表現ではありません。したがって、実際には使用できません。

不正な宣言のように見えます。宣言されている型を変更しようとしているため、形式が正しくありません。

言語の文法では、実際にはの左側の部分に特殊な非終端記号for-range-declaration:を使用していることに注意してください。これは最終的に単一の宣言に解決されます。したがって、範囲ベースの for ループで複数の変数を宣言することは違法です。

于 2013-11-19T11:13:14.833 に答える