一、概述
1.副作用(side effect)
在计算表达式时对某些东西(存储在变量中的值)进行了修改
2.顺序点(sequence point)
程序执行过程中的一个时间点
3.顺序点类型
分号(;),逗号(,);冒号(:);或运算符(||)
4.顺序点的作用
在这个点之后,将确保前面的副作用都已生效。这意味着程序处理下一条语句之前,赋值运算符、递增运算符和递减运算符执行的所有修改都必须完成。另外,任何完整的表达式末尾都是一个顺序点,完整表达式的定义:不是另一个更大表达式的子表达式。完整表达式的例子有:表达式语句中的表达式部分以及用作while循环中检测条件的表达式。
二、例证
1.例证1
while(guests++ < 10)
cout << guests << endl;
分析:由于while循环中的测试表达式guests++ < 10是一个完整的表达式,所以该表达式的末尾是一个顺序点。所以测试中比较的是guests与10的大小关系,在该表达式完成之后,guests将递增1,所有cout打印的guests值为递增之后的值。
2.例证2
i++ < 6 || i ==j
由于||是一个顺序点,所以比较的是i < 6,然后i++,此后与j比较的i已经递增,且c++规定||的左边表达式优先于右边的表达式,如果左边为false,右边的表达式将不计算