次の valueA と valueB の初期化は、未定義の動作を伴いますか?
int array[2] = {1,2};
int index = 0;
int valueA = array[index++], valueB = array[index++];
c++ 98 と c++ 11 の間でこれに変更はありますか?
次の valueA と valueB の初期化は、未定義の動作を伴いますか?
int array[2] = {1,2};
int index = 0;
int valueA = array[index++], valueB = array[index++];
c++ 98 と c++ 11 の間でこれに変更はありますか?
動作は明確に定義されています。C++11 ドラフト n3290 §8 Declaratorsから:
宣言内の各 init-declarator は、それ自体が宣言内にあるかのように個別に分析されます。
したがって、コードは次と同等です。
...
int valueA = array[index++];
int valueB = array[index++];
私は C++98 標準を持っていませんが、ISO/IEC 14882:2003 ("C++03") にも同じ文言があります。
未定義の動作ではありません。コンマはシーケンスポイントです。