17-优先级
5.3.5 优先级
递增运算符和递减运算符都有很高的结合优先级,只有圆括号的优先级比它们高。因此, x y++ 表示的是 (x) (y++) ,而不是 (x y)++ 。不过后者无效,因为递增和递减运算符只能影响一个变量(或者,更普遍地说,只能影响一个可修改的左值),而组合 x y 本身不是可修改的左值。
不要混淆这两个运算符的优先级和它们的求值顺序。假设有如下语句:
y = 2;
n = 3;
nextnum = (y + n++)*6;
nextnum 的值是多少?把 y 和 n 的值带入上面的第3条语句得:
nextnum = (2 + 3)*6 = 5*6 = 30
n 的值只有在被使用之后才会递增为 4 。根据优先级的规定, ++ 只作用于 n ,不作用于 y + n 。除此之外,根据优先级可以判断何时使用 n 的值对表达式求值,而递增运算符的性质决定了何时递增 n 的值。
如果 n++ 是表达式的一部分,可将其视为“先使用 n ,再递增”;而 ++n 则表示“先递增 n ,再使用”。