①作为单独语句存在,如下面的两段代码:
int i=0;
if(i++){...}
—————
int i=0;
if(++i){...}
int i=4,j=3;
if((i=j++)!=4){...}
括号()的优先级比!=的优先级高,但 编译器仍然将++运算符最后执行。即先执行赋值语句i=j,然后判定(i=3)!=4成立,最后执行j++,接下去执行条件体里代码。
int i=0;
if(i++){...}
—————
int i=0;
if(++i){...}
上面的条件判断代码虽然是以单独语句出现,但编译器将其等价于i++(或++i)>0
故在第一段代码中先执行i>0判定,再执行i++,因此条件体里的代码不被执行;
而在第二段代码中先执行i=i+1,再执行i>0,因此条件里代码会被执行
int i=4,j=3;
if((i=j++)!=4){...}
括号()的优先级比!=的优先级高,但 编译器仍然将++运算符最后执行。即先执行赋值语句i=j,然后判定(i=3)!=4成立,最后执行j++,接下去执行条件体里代码。
综上可知
当i++作为单独条件语句进行判定时,即使没有显示地声明与0的比较,编译器仍将加上与0的比较;
当i++作为复合语句使用时,不管++是否在优先级更高的运算符中,++仍然最后才执行,即在当前所在语句操作执行之后