增量和减量操作符表示为:++和--。
增量操作表示加1,减量操作表示减1。例如:
a++; //相当于a=a+1;
++a; //相当于a=a+1;
a--; //相当于a=a-1;
--a; //相当于a=a-1;
增量操作符有前增量与后增量之分。前增量操作++a的意义为:先修改操作数使之增1,然后将增1过的。值作为表达式的值。而后增量操作a++的意义为:先将变量a的值作为表达式的值确定下来,再将a增1。对于增量和减量操作符,它要求操作数是左值,因为操作数的值要发生变化。例如:
int a=3;
int b=++a;//相当于a=a+1;b=a;
cout <<a <<" " <<b <<endl;
int c=a++; //相当于c=a;a=a+1;
cout <<a <<" " <<c <<endl;
输出的结果为:
4 4
5 4
b被赋予了4, 因为前增量操作先将a自增为4,然后作为表达式赋值。C被赋予了4,因为后增量操作使表达式的值(a)先赋给c,然后a再自增值为5。
由于前增量操作返回的值即修改后的变量值,所以返回的仍是一个左值。例如:
int a=3;
++(++a); //Ok:++a是左值
例中得到的a的值为5。
由于后增量操作返回的值是原先a的值,尔后a的值已经发生变化,故返回的不能是当前a,只能是过去的a值,不能是左值。例如:
int a=3;
++(a++); //error:a++不是左值
相应的,有前减量--a和后减量a--。例如:
int a=3;
int b=--a;//相当于a=a-1;b=a;
cout <<a<<" " <<b<<endl;
int c=a--;//相当于c=a;a=a-1;
cout <<a <<” ” <<c <<endl;
输出的结果为:
2 2
1 2
由于增量与减量操作包含有赋值操作,所以操作数不能是常量,它必须是一个左值表达式。例如:
3++; //error
增量与减量操作符是两个+或两个-的一个整体,中间不能有空格。如果有多于两个+或两个-连写的情况,则编译首先识别前面两个+或-为增量或减量操作符。
例如,对于“int a=1,b=5,c;”的变量定义,下面5个表达式,有些不允许:
c=a+b; //ok:c=6
c=a++b; //error:编译接收为a ++ b
c=a+++b; //ok:编译接收为a++ + b
c=a++++b; //error:编译接收为a++ ++b
c=a+++++b; //error:编译接收为a++ ++ +b
第2行中,编译将其理解为a ++ b。由于++操作是单目运算符,所以该表达式语法错误。若要合法,应写成a+ +b,表示a加上正b。
第4行中,编译将其理解为a++ ++b。 同样由于++是单目操作符,引起编译错误。若要合法,应写成a+++ +b,表示a++加上正b。
第5行中,编译将其理解为a++ ++ +b。由于a++是个非左值表达式,所以中间的++操作符是非法的。若要合法,应写成a+++ ++b或者a++ + ++b,表示a++加上++b。