Приоритет только определяет, какие операнды с какими группами сгруппированы - он не контролирует порядок, в котором вычисляются выражения.
В вашем примере это означает, что выражение анализируется как
a || (––b && ––c)
Обе ||
и &&
оценка слева направо 1 . Оба вводят точку последовательности (IOW, левый операнд будет оценен, и все побочные эффекты будут применены до того, как правый операнд будет оценен).
Оба оператора короткое замыкание - если левый операнд ||
оценивается как ненулевой, то результатом выражения будет 1 (истина) независимо от значения правого операнда, поэтому правый операнд вообще не оценивается. Если левый операнд &&
равен 0, то результатом выражения будет 0 (ложь) независимо от значения правого операнда, поэтому правый операнд вообще не оценивается.
В вашем выражении a
вычисляется первым. Он имеет ненулевое значение (1), поэтому ––b && ––c
не оценивается.
Вместе с ?:
и запятыми. Все остальные операторы (арифметика, равенство, индекс и т. Д.) Не предписывают определенный порядок вычисления.