a++: 先將a的值代入表達式,在表達式運算完畢後,再將a進行++處理
++a: 先將a進行++處理,再將a的值代入表達式
(注意咬字)
a+++++b在編譯時會報錯,(a++)+(++b)和a++ + ++b不會報錯
「a+++++b」這一段根本就沒法解析,編譯系統從左至右掃描整條語句,先遇到a++,判斷出來是一個a的後綴自加運算,而後接着掃描,遇到一個+,+是一個二目運算符,它的左邊已經有一個運算數a++了,系統就向右搜索第二個運算數,又遇到一個+,++比+的運算級別要高,這時,編譯系統就將兩個+當作一個總體來處理,既然是++,編譯系統就認定,確定它的左邊或右邊有一個變量,編譯系統先搜索左邊,發現++,不是變量,再搜索右邊,發現+b,+b是什麼東西?編譯系統是沒法搞明白的,所以它就認爲++是一個缺乏左值的自增運算符,因而提示提示用戶:’++’ needs l-value
另外,假如定義int a = 1,b = 2;
c = a++ + ++b;
1:先執行b自加,b變爲3;至關於:b = b+ 1;
2:求a與b之和,賦給c;至關於:c = a + b ;//c = 1+3;
3:執行第二步以後,a自加1:a++;
4:若是要輸出的話,(按執行順序)
b = 3;
c = 4;
a = 2;
c= a+++b;
1:先執行a+b,至關於:c= a+b = 1+2;
2:a自增,至關於:a=a+1=2;
//至關於c=a+b; a++;
//假如是 c= (a++)+b; 也是向上面的順序同樣執行。由於a++ 的意思是先將a進行++處理,再將a的值代入表達式 //假如是 c= ++a+b; 就不同了。先執行++a,再執行 c=a+b;