• Почему из двух функций, стоящих в условии цикла, при определенных условиях выполняется только одна?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Но столкнулся с такой проблемой: если первая функция возвращает true, то вторая функция даже не выполняется. Если поменять or на and, то ситуация повторяется, но наоборот: если первая возвращает false, то вторая не выполняется.

    Поздравляю, ты открыл для себя детали работы операторов || и && в С и С++.

    как-то обойти?


    bool f1 = func(1);
    bool f2 = func(2);
    if (f1 || f2)


    Можно схитрить и использовать побитовое или вместо логического, но, как минимум, это заслуживает комментария, зачем так сделано:
    while (func(1) | func(2))
    Ответ написан
    Комментировать
  • Почему из двух функций, стоящих в условии цикла, при определенных условиях выполняется только одна?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Фокус в оптимизации логических операций.
    Если первый операнд AND имеет значение false, то результат будет false независимо от значения второго операнда. Соответственно, вычислять второй операнд смысла нет.
    Аналогично, если первый операнд OR имеет значение true, то результат будет true независимо от значения второго операнда.
    Если вам нужно, чтобы выполнялись обе функции, то решением, как ни странно, будет явный вызов обоих функций в теле цикла с записью результатов выполнения в переменные.
    Ответ написан
    Комментировать