++i和i++在作為一個單獨語句使用時沒有區別,即相當於i=i+1; 而作為語句的一部分時,如a=++i; 和a=i++; ++i先執行加1操作,再執行賦值操作(因++在前),而i++是先執行賦值操作,再執行加1操作(因++在后)。但這種論述未將其中更深的運行機制講出來,尤其是在if或while等判斷語句中,下面對其進行探討:
1、作為單獨語句存在,如下面的兩段代碼:
int i=0;
if(i++){...}
int i=0;
if(++i){...}
上面的條件判斷代碼雖然是以單獨語句出現,但編譯器將其等價於i++(或++i)>0,故在第一段代碼中先執行i>0判定,再執行i++,因此條件體里的代碼不被執行;而在第二段代碼中先執行i=i+1,再執行i>0,因此條件里代碼會被執行。
2、作為語句的一部分存在,如下面的一段代碼:
int i=4,j=3;
if((i=j++)!=4){...}
上面的代碼中括號()的優先級比!=的優先級高,但編譯器仍然將++運算符最后執行。即先執行賦值語句i=j,然后判定(i=3)!=4成立,最后執行j++,接下去執行條件體里代碼。
綜上可知當i++作為單獨條件語句進行判定時,即使沒有顯示地聲明與0的比較,編譯器仍將加上與0的比較;當i++作為復合語句使用時,不管++是否在優先級更高的運算符中,++仍然最后才執行,即在當前所在語句操作執行之后。