初始化中的评估顺序

kyk*_*yku 2 c++ initialization c++11

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

int array[2] = {1,2};
int index = 0;
int valueA = array[index++], valueB = array[index++];
Run Code Online (Sandbox Code Playgroud)

c ++ 98和c ++ 11之间有什么变化吗?

Mat*_*Mat 5

行为是明确的.来自C++ 11 draftn3290§8 声明:

声明中的每个init-declarator都会被单独分析,就好像它本身就在声明中一样.

所以你的代码相当于:

...
int valueA = array[index++];
int valueB = array[index++];
Run Code Online (Sandbox Code Playgroud)

我没有C++ 98标准,但ISO/IEC 14882:2003("C++ 03")中也有相同的措辞.