首先这段代码只能作为试验,实际开发中切勿这样写。
然后讲所谓的运算符优先级并非运算优先级,而是一种结合性优先级,而&&等逻辑运算符的运算优先级是高于++的。打个比方,a = b + c * d;程序其实是从a开始“扫描”a,=,到这里编译器知道了a会获得一个赋值,然后b +,这里编译器会知道会知道这个赋值是一个和,然后才是c*d,这是运算优先级,在这里是从左到右的。它是发生在结合性优先级之前的。然后才是发挥结合性优先级特性,“先乘除后加减再赋值”,这就是a = b + c * d的中发生的全部事情。
回到这个问题,编译器首先“扫描”过x||之后已经得出 end = 1,尽管后面的()和++结合性优先级再高,也不会被运算了。
这里的结合性优先级可能用词的不是很准确,但是这不是关键,关键在于“编译器和人一样,不是优先级高的运算符就会被第一眼看见,而是看完一个语句中的所有运算符,才知道谁高谁低。”说的比较绕,希望对你有帮助。