两个相邻操作符的执行顺序由它们的优先级决定。例如: a + b*c,在这个表达式中,乘法和加法操作符是两个相邻的操作符,由于乘法的优先级比加法高,所以乘法运算先于加法运算执行。编译器在这里别无选择,它必须先执行乘法运算。
如果它们的优先级相同,它们的执行顺序由它们的结合性决定。例如:a + b + c,由于 + 操作符的结合性是由左到右(L-R),所以先计算a+b,然后计算(a+b)+c。
除此之外,编译器可以自由决定使用任何顺序对表达式进行求值,只要它不违背逗号、&&、||和?:操作符所施加的限制。
上面这句话是什么意思呢?举个例子说明: a*b+ c*d + e*f,对于这个表达式,如果仅有优先级决定这个表达式的求值顺序,那么所有3个乘法运算将在所有加法运算之前进行。事实上,这个顺序并不是必需的。实际上,只要保证每个乘法运算在它相邻的加法运算之前执行即可。
例如这个表达式可能会以下面的顺序进行:
a*b
c*d
(a*b)+(c*d)
e*f
(a*b)+(c*d)+(e*f)
注意第一个加法运算在最后一个乘法运算之前执行。
如果这个表达式按下面这个顺序执行ÿ