增量和減量

 

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章