First, as you said, && has a higher priority, which means that the grouping of operands must be
(++i) || (++j && ++k)
Why are you saying that “according to the priority of the operator” it should be (++i || ++j) && (++k) not clear to me. It just contradicts what you said yourself.
Secondly, the priority of the operator has absolutely nothing to do with the order of evaluation. Operator priority dictates the grouping between operators and their operands (i.e., operator priority indicates which operand belongs to the operator).
Meanwhile, the evaluation order is a completely different story. It either remains undefined, or is determined by a completely different set of rules. In the case of operators || and && evaluation order is indeed defined as from left to right (with obligatory early completion when possible).
So, operator precedence rules tell you that grouping should be
(++i) || ((++j) && (++k))
Now the rules of the evaluation order tell you that we first evaluate ++i , then (if necessary) evaluate ++j , then (if necessary) evaluate ++k , then evaluate && and finally, we evaluate || .
source share