valueA和valueB的以下初始化是否需要未定义的行为?
int array[2] = {1,2};
int index = 0;
int valueA = array[index++], valueB = array[index++];
c ++ 98和c ++ 11之间是否有任何变化?
答案 0 :(得分:5)
行为定义明确。来自C ++ 11 draftn3290§8声明者:
声明中的每个init-declarator都会被单独分析,就好像它本身就在声明中一样。
所以你的代码相当于:
...
int valueA = array[index++];
int valueB = array[index++];
我没有C ++ 98标准,但ISO / IEC 14882:2003(“C ++ 03”)中也有相同的措辞。
答案 1 :(得分:0)
未定义的行为。 逗号为sequence point。