ли не отдельные выражения в композитном логической И/ИЛИ выражения, как предполагается, будет оцениваться, прежде чем логические операторы применяются к их результату Почему ++k
нетронутой в состоянии m = ++i && ++j || ++k
по следующей программе:Почему «k» не увеличивается в выражении «m = ++ i && ++ j || ++ k», когда «++ i && ++ j» оценивается как true? ?
#include<stdio.h>
int main()
{
int i=-3, j=2, k=0, m;
m = ++i && ++j || ++k;
printf("%d, %d, %d, %d\n", i, j, k, m);
return 0;
}
выход: -2,3,0,1
Но я ожидаю, что выход -2,3,1,1
Поскольку ** короткое замыкание ** гарантируется стандартом. Так как '++ i && ++ j' оценивается как' true', независимо от оценки '||' конечный результат будет оцениваться как 'true', и поэтому окончательная' || 'просто не оценивается. Это известно как короткое замыкание. Стандарт C & C++ гарантирует это поведение для операторов '||' и '&&'. –
Я ответил, но я не понимаю, почему люди сначала спрашивают о StackOverflow перед тем, как погрузиться в их книгу на языке программирования C. –
«Разве не индивидуальные выражения в составном логическом выражении AND/OR, которое должно оцениваться первым» - Нет, конечно, это не так, как вам скажут даже самые простые чтения на C. –