我正在从教程的角度学习C ++。在以下代码中:
int main() {
int i, j;
j = 10;
i = (j++, j+100, 999+j);
cout << i;
return 0;
}
输出为1010。但是不应该为1009,因为在使用整个表达式后应该执行'++'?
逗号运算符是一个序列点:例如在C ++ 17标准中所说的,
与左表达式相关联的每个值计算和副作用被排序在与正确的表达式相关联的每次值计算和副作用之前。
因此,保证++
运算符的作用在评估999+j
之前就已经发生。
++
应该在使用整个表达式后完成吗?
没有后缀运算符求值为旧j
的值,并具有递增j
的副作用。
逗号运算符评估第二个操作数之后评估第一个操作数并评估其副作用。
由逗号分隔的一对表达式从左到右求值;左表达式是舍弃值表达式(第5条)83。与左侧相关的每个值计算和副作用在每次值计算和副作用之前对表达式进行排序与正确的表达式相关联。
逗号运算符的关联性从左到右。
因此,将从j++
开始首先评估(j
变为11
)
然后评估j + 100
(不使用)
然后评估999 + j
等于1010
此最右边的值分配给i
因此,输出为1010