前面介绍了如何使用赋值运算符修改变量,以及如何用+=运算符递增变量的值。还可以用–=运算符递减变量的值。C++也提供了另外两个不寻常的算术运算符来执行递增和递减任务,它们分别称为递增和递减运算符,即++和––。
这两个运算符并不只是递增和递减的另一个选项,在进一步应用C++的过程中,就可以看出它们的价值了。递增和递减运算符是一元运算符,可以应用于整型变量。例如,假定变量的类型是int,下面三个语句完成的任务是一样的:
count=count+1;
count +=1;
++count;
这3个语句都给变量count递增1。最后一种形式使用了递增运算符,显然是最简洁的一种。这个运算符的操作不同于前面介绍的其他运算符,因为它直接修改其操作数的值。表达式的结果是递增变量的值,再在表达式中使用已递增的值。例如,如果count的值是5,则执行下面的语句:
total= ++count+6;
递增和递减运算符的优先级高于其他二元算术运算符,因此,count的值先递增为6,再在赋值运算符的右边表达式中使用这个值6,所以变量total的值就是12。
可以用相同的方式使用递减运算符:
total=––count+6;
在执行这个语句之前,假定count的值为6,递减运算符把count的值减为5,这个值再用来计算存储在total中的值,结果是11。
递增和递减运算符的后缀形式
前面都是把运算符放在变量的前面,这称为前缀形式。运算符也可以放在变量的后面,这称为后缀形式,其结果与前缀形式略有不同。在使用++的后缀形式时,先在表达式中使用变量的值进行计算,再递增该变量的值。例如,把前面的例子改写为:
total = count++ + 6;
count的初始值还是5,但total的值应是11,因为该语句将使用count的初始值计算表达式,再递增count的值,使之递增为6。上面的语句等价于:
total= count +6;
++count;
在像a++ + b,甚至a+++b这样的表达式中,其含义并不是很明显,或者不清楚编译器会执行什么操作。这两个表达式的含义是相同的,但第二个表达式也可能意味着a + ++b,它的含义就不同了,等价于另外两个表达式,如下表达更清晰:
total= 6 + count++;
另外,还可以使用括号:
total = (count++) +6;
前面应用于递增运算符的规则也适用于递减运算符。例如,如果count的初始值是5,则语句:
total =––count + 6;
total的值是10。如果将语句改写为:
total = 6 + count––;
total的值就是11。
必须避免在一个表达式中多次使用这些运算符的前缀形式。假定变量count的值是5,则语句:
total = ++count * 3 + ++count * 5;
首先,这个语句理解起来很费劲,其次也是最重要的是,该语句多次修改了变量的值,在C++中,结果就是不确定的,编译器会给这个语句生成一个错误消息,但在某些情况下不会出错。在程序中这可不是一个理想的功能,所以不要在一个语句中多次修改变量的值。
还要注意,下面语句的结果也是不确定的:
k = ++k + 1;
这个语句递增赋值运算符右边的变量的值,因此在一个表达式中对变量k的值修改了两次。计算一个表达式只能对每个变量修改一次,变量以前的值只能用于确定要存储的值。根据C++标准,这种表达式是不确定的,但这并不表示编译器不会编译它。这只表示不能保证结果的一致性。
递增和递减运算符通常应用于整数,尤其常用于循环,详见第5章。在后面的章节中,它们可应用于浮点数。后面的章节及探讨它们如何应用于C++中的某些其他数据类型,并能够得到特别且非常有用的结果。





