增量和減量操作符表示爲:++和--。
增量操作表示加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。