Я выполнил следующий код в 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++
.
В чем причина такого поведения? Имеет ли &&
точка последовательности, что-то связано с этим поведением? Если да, то почему мы говорим, что &&
имеет более низкий приоритет, чем ++
?