2

次の valueA と valueB の初期化は、未定義の動作を伴いますか?

int array[2] = {1,2};
int index = 0;
int valueA = array[index++], valueB = array[index++];

c++ 98 と c++ 11 の間でこれに変更はありますか?

4

2 に答える 2

5

動作は明確に定義されています。C++11 ドラフト n3290 §8 Declaratorsから:

宣言内の各 init-declarator は、それ自体が宣言内にあるかのように個別に分析されます。

したがって、コードは次と同等です。

...
int valueA = array[index++];
int valueB = array[index++];

私は C++98 標準を持っていませんが、ISO/IEC 14882:2003 ("C++03") にも同じ文言があります。

于 2012-04-27T08:43:41.850 に答える
0

未定義の動作ではありません。コンマはシーケンスポイントです。

于 2012-04-27T08:30:45.527 に答える