初始化中的评估顺序

时间:2012-04-27 08:28:02

标签: c++ c++11 initialization

valueA和valueB的以下初始化是否需要未定义的行为?

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

c ++ 98和c ++ 11之间是否有任何变化?

2 个答案:

答案 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