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

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

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

Если

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

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

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

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

 John Roberts19 окт. 2012 г., 21:28
Интервьюер упомянул, что они целые числа, я просто пренебрег в этом вопросе. Я починю это.
 Matthieu M.19 окт. 2012 г., 21:21
Встречный вопрос: это зависит от того, чтотип,ij а также ?k

Ответы на вопрос(2)

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

Решение Вопроса

&& короткое замыкание

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

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

 John Roberts19 окт. 2012 г., 21:04
Я вижу сейчас. Все, что интервьюер должен был упомянуть, это фраза "короткое замыкание» и я быЯ понял. Благодарю.
 Andreas19 окт. 2012 г., 21:54
Если поставитьC / C ++ эксперт » в вашем резюме это был бы очень хороший вопрос для интервью, так как каждый, кто принимал CS101, знал бы о "короткое замыканиеНо узнавать это в коде - это отдельная история. !Иначе
 Matthieu M.19 окт. 2012 г., 21:21
@EmilioGaravaglia: Ну, в C и C ++ короткое замыкание&& а также|| интенсивно используется. Напримерif (p && p->valid) только правильнотак как p->valid не оценивается, когдаp нулевой. Вопрос плохой, но знание о коротком замыкании является обязательным.
 Russell Borogove19 окт. 2012 г., 23:59
Интервьюер абсолютно не долженне говоря уже о коротком замыкании. Если вы попытаетесь ответить на вопрос и получите неправильный ответ, интервьюер должен спросить "Вы знаете, что такое короткое замыкание оператора? Если этот вопрос заставит вас немедленно вернуться к проблеме и получить правильный ответ, вы получите частичный кредит.
 John Dibling19 окт. 2012 г., 21:19
Это плохой вопрос для интервью. И этот код тоже очень плохой.
 Emilio Garavaglia19 окт. 2012 г., 21:12
@LuchianGrigore: ну ... не обязательно. "короткое замыкание в логической операции являетсяподробно кто-то не очень хорошо привыкший к языку, может не знать. Но однажды сказав, вы можете увидеть его способность рассуждать о. Спрашиваемый таким образом, похоже, что вопрос скорее в проверке знаний синтаксиса, чем в способности решать проблемы. Само по себе это не плохо, но, по крайней мере, это следует объявить, а не обнаружить.
 Luchian Grigore19 окт. 2012 г., 21:05
@JohnRoberts хорошо ... это победит цель интервью, нет? :П
 Luchian Grigore19 окт. 2012 г., 21:15
@ EmilioGaravaglia О, я согласен. ИМО это неХорошие вопросы для интервью. Это'Это мелкие мелочи, которые совсем не полезны при оценке кого-либо. Я хотел сказать, что задавать этот вопрос - все равно что задаватьВы знаете, что такое короткое замыкание?Только замаскированный в коде.
 Luchian Grigore19 окт. 2012 г., 22:02
@ Андреас, если вы положитеC / C ++ эксперт » в вашем резюме выЯсно, что нет. : D

Ваш ответ на вопрос