Мне просто задали вопрос в техническом интервью, который меня немного смутил.
Вопрос был в следующем:
Если
int i = -1, int j = -1, and int k = -1,
и мы запускаем следующую строку:
++i && ++j && ++k
каковы будут новые значения i, j и k? Причина, по которой я был сбит с толку, заключается в том, что, поскольку мы не присваиваем это выражение чему-либо, не похоже, что операторы and должны иметь какое-либо значение (только операторы приращения). Однако запуск простой тестовой программы быстро доказал, что я ошибся. Может ли кто-нибудь объяснить мне это, поскольку я никогда раньше не видел это упражнение.
Ключевым моментом здесь является то, что &&
короткое замыкание
Так, ++i
оценивается первым. Увеличивается i
и возвращает новое значение, которое 0
, так что остальная часть выражения не оценивается.
Значения должны быть 0, -1, -1
если я не ошибаюсь.
Значение выражения ++i
является 0
в этом случае, то есть false, поэтому ярлыки операций и и последние выражения никогда не оцениваются.