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声明符:
声明中的每个 init-declarator 都被单独分析,就好像它本身在声明中一样。
所以你的代码相当于:
...
int valueA = array[index++];
int valueB = array[index++];
我没有 C++98 标准,但 ISO/IEC 14882:2003(“C++03”)中存在相同的措辞。
不是未定义的行为。逗号是序列点。