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声明符:

声明中的每个 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 回答