Арифметические операторы C ++

Мне просто задали вопрос в техническом интервью, который меня немного смутил.

Вопрос был в следующем:

Если

int i = -1, int j = -1, and int k = -1,

и мы запускаем следующую строку:

++i && ++j && ++k

каковы будут новые значения i, j и k? Причина, по которой я был сбит с толку, заключается в том, что, поскольку мы не присваиваем это выражение чему-либо, не похоже, что операторы and должны иметь какое-либо значение (только операторы приращения). Однако запуск простой тестовой программы быстро доказал, что я ошибся. Может ли кто-нибудь объяснить мне это, поскольку я никогда раньше не видел это упражнение.

10

Решение

Ключевым моментом здесь является то, что && короткое замыкание

Так, ++i оценивается первым. Увеличивается i и возвращает новое значение, которое 0, так что остальная часть выражения не оценивается.

Значения должны быть 0, -1, -1 если я не ошибаюсь.

20

Другие решения

Значение выражения ++i является 0 в этом случае, то есть false, поэтому ярлыки операций и и последние выражения никогда не оцениваются.

2