顺序点

更新时间:2022-08-25 19:55

顺序点,也称作序列点,是计算机程序中一些执行点,在该点处之前的求值的所有的副作用已经发生,在它之后的求值的所有副作用仍未开始。在C与C++程序设计语言中,表达式的值依赖于它的子表达式的求值顺序。增加更多的顺序点限制了可能的求值顺序,能保证有一个一致结果。

简介

在C、C++等允许表达式有副作用的语言中,通常都规定了顺序点,顺序点就是表达式中的副作用的最晚生效时刻,或指程序执行中关键的一点。在这个顺序点之前,所有的副作用的计算工作都必须完成,可以说顺序点是前一阶段计算的分水岭。在程序执行中,可以存在一系列的顺序点,一旦执行到一个顺序点,此前的副作用都必须生效。但是在顺序点之间并没有任何保证。在C++11中,顺序点概念已经被这种方法取代:直接指出一个求值是在另一个求值之前,或者两个求值是无顺序的。无顺序的求值可以重叠进行。

表达式

表达式亦称表示式、运算式或数学表达式,在数学领域中是一些符号依据上下文的规则,有限而定义良好的组合。数学符号可用于标定数字(常量)、变量、操作、函数、括号、标点符号和分组,帮助确定操作顺序以及有其它考量的逻辑语法。表达式有两种功能:

表达式一定会产生一个值

表达式可能会产生“副作用”(side effect)。

表达式中的副作用何时生效以及运算对象的求值顺序,会影响到表达式的值。比如:

如果“+”的两个运算对象,从左到右计算:

如果“+”的两个运算对象,从右到左计算,b的值都是8。

副作用

在C++标准指出,副作用是访问一个由可变的左值(volatile lvalue)指派的对象(basic.lval),修改一个对象,调用库I/O函数,或者调用函数等所有这些能够改变执行环境的状态的操作都是副作用。

顺序点的位置

在C与C++中,顺序点在下述位置出现:(C++的重载操作符的行为类似于函数)

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}