C ++: Несколько условий выхода в цикле for (несколько переменных): AND -ed или OR -ed?

Для циклов и нескольких переменных и условий.

Я использую цикл 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)

Или это что-то совсем другое? Я полагаю, что логично было бы оценить один из двух указанных выше способов, а не что-то другое.

10

Решение

Оператор запятой вернет значение правильного выражения, поэтому напишем так:

 src < 8, dst >= 0;

В качестве условия будет так же, как просто писать dst >= 0, src < 8 в этом случае будет полностью проигнорирован, поскольку он оценивается отдельно от второго условия, а затем возвращается второе условие. Это не относится к AND или OR, но фактически просто «отбрасывает» первую проверку полностью.

Если вы хотите оценить это правильно, вы должны использовать один из двух вариантов (явное указание поведения через || или же &&).

Подробнее см. Оператор запятой:

Когда набор выражений должен быть оценен для значения, учитывается только самое правое выражение.

17

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

Оператор запятой оценивает первое выражение и отбрасывает результат. Затем он оценивает второе, и это то, что является значением, проверенным в if. Вы обнаружите, что ваше состояние не && ни || но ведет себя точно так же, как если (dst> = 0). Иногда форма полезна для изменения значения в конце цикла перед выполнением теста.

2

По вопросам рекламы [email protected]