Я использую цикл for, чтобы установить исходные и целевые индексы для копирования элементов в массиве.
for(int src = 0, dst = 8;
src < 8, dst >= 0;
src ++, dst --)
{
arr2[dst] = arr1[src];
}
Как-то так или иначе.
Мой вопрос об условиях выхода. Здесь их два. src < 8
а также dst >= 0
, Являются ли эти условия AND-ed (&&
) или OR-ed (||
).
Чтобы дополнительно объяснить, оцениваются ли условия следующим образом:
(src < 8) && (dst >= 0)
Или они так оцениваются?
(src < 8) || (dst >= 0)
Или это что-то совсем другое? Я полагаю, что логично было бы оценить один из двух указанных выше способов, а не что-то другое.
Оператор запятой вернет значение правильного выражения, поэтому напишем так:
src < 8, dst >= 0;
В качестве условия будет так же, как просто писать dst >= 0
, src < 8
в этом случае будет полностью проигнорирован, поскольку он оценивается отдельно от второго условия, а затем возвращается второе условие. Это не относится к AND или OR, но фактически просто «отбрасывает» первую проверку полностью.
Если вы хотите оценить это правильно, вы должны использовать один из двух вариантов (явное указание поведения через ||
или же &&
).
Подробнее см. Оператор запятой:
Когда набор выражений должен быть оценен для значения, учитывается только самое правое выражение.
Оператор запятой оценивает первое выражение и отбрасывает результат. Затем он оценивает второе, и это то, что является значением, проверенным в if. Вы обнаружите, что ваше состояние не && ни || но ведет себя точно так же, как если (dst> = 0). Иногда форма полезна для изменения значения в конце цикла перед выполнением теста.