在称为序列点的执行序列中的某些特定点处,先前评估的所有副作用应完整,并且不会发生后续评估的副作用。
任何人都可以用初学者的话解释这些行和相关术语吗?
答案 0 :(得分:1)
n++
等表达式有副作用,即它们不仅会产生结果,还会修改变量。
*
运算符不引入序列点。因此,在表达式n++ * n--
中未指定,n++
(递增n
)的副作用是否已在评估n--
时发生。根据这一点,n++ * n--
会产生不同的结果。
;
引入了一个序列点。如果n == 5
,则在n++; n--;
之后,n == 5
再次成立。
答案 1 :(得分:0)
请考虑以下声明:
x = y++ * --z;
有三种评估:y++
,--z
,y++
的结果乘以--z
的结果。有三种副作用:向y
添加1,从z
减去1,并将y++ * --z
的结果分配给x
。
序列点是程序执行中的所有上述操作完成的点,在这种情况下是在语句的末尾。