Я выполнил следующий код в Code:: Blocks 10.05 в Windows 7.
int a=0,b=0,c;
c=a++&&b++;
printf("\na=%d\nb=%d\nc=%d\n\n",a,b,c);
Полученный результат я приведен ниже,
a=1
b=0
c=0
Это имеет смысл из-за оценки короткого замыкания.
Выражение a++ - это пошаговое приращение, а 0 возвращается в логическое и (&&). Следовательно, часть b++ не оценивается, так как и 0 && 0, и
0 && 1 оценивается как 0.
Но здесь возникает мое сомнение. Значение приоритета операторов ясно указывает, что ++ имеет более высокий приоритет над &&. Итак, мое понимание было таким, как оцениваются a++ и b ++, а затем && проверяет результат выражения a++, чтобы прийти к решению. Но этого не произошло, только здесь оценивается a++.
В чем причина такого поведения? Имеет ли && точка последовательности, что-то связано с этим поведением? Если да, то почему мы говорим, что && имеет более низкий приоритет, чем ++?