递增和递减
递增和递减运算符允许以简化方式编写用于将操作数加/减 1 的表达式。这两个运算符大多在 循环结构 内部,用于在访问数组或其他支持枚举的对象时修改索引。
递增由两个连续的加号表示:'++'。递减由两个连续的减号表示:'--'。
这种运算符有两种类型:前缀和后缀。
前缀运算符,顾名思义,位于操作数之前 (++x,--x)。前缀运算符更改操作数的值,而这个新值将参与表达式的后续计算。
后缀运算符位于操作数之后 (x++,x--)。后缀运算符在表达式中替换当前操作数值的副本,然后更改其值(新值不会进入表达式)。ExprIncDec.mq5 脚本中给出了几个简单的例子。
int i = 0, j;
|
对于需同时引用操作数原值并进行副作用修改的表达式,后缀形式有助于编写更紧凑的表达式(若采用其他书写方法则需要两条单独的语句)。在所有其他情况下,建议使用前缀形式(前缀形式不会创建“旧”值的临时副本)。
在下面的示例中,符号在数组元素中连续反转,直到找到第零个元素。通过后缀递增运算符 k++(包含在 循环结构 while 中)可确保遍历数组索引。根据这个后缀,a[k++] = -a[k] 表达式首先更新第 k 个元素,然后将 k 加 1。然后检查赋值结果是否不等于零(!= 0,参见 下一节)。
int k = 0;
|
下表按优先级顺序显示了递增和递减运算符:
优先级 |
符号 |
说明 |
示例 |
结合性 |
---|---|---|---|---|
1 |
++ |
后缀递增 |
e1++ |
左 |
1 |
- |
后缀递减 |
e1-- |
左 |
2 |
++ |
前缀递增 |
++e1 |
右 |
2 |
- |
前缀递减 |
--e1 |
右 |
所有递增和递减运算的优先级都高于算术运算。前缀的优先级低于后缀。在下面的例子中,x 的“旧”值与 y 值相加,随后对 x 进行递增。如果前缀优先级较高,将对 y 执行递增,此后将 x 与新值 6 相加,我们将得到 z = 6, x = 0(之前的值)。
int x = 0, y = 5;
|