Работа оператора на низком уровне C ++

0

Это очень подробный вопрос о логических операторах ||, && на C++. Я использую их в своем коде, но я сомневаюсь в этом коде:

bool filluppointer(int*sth);
if (filluppointer(&pointer) || filluppointer2(&pointer))
    return;

filluppointer возвращает true, если что-то произошло, поэтому не всегда. Мой вопрос: если первая функция вернет true, будет ли выполняться вторая функция в блоке if? || равен оператору OR, поэтому согласно спецификации обе функции выполняются последовательно, а затем сравниваются bools. Я просто хочу создать такую структуру, которая возвращается всей if if, когда встречается первая истинная функция, и очень важно остановиться тогда, так как я хочу, чтобы это конкретное значение в указателе. Выполнение другой функции впоследствии изменит значение (не здесь, а в моем реальном коде).

  • 2
    Нет, посмотрите оценку короткого замыкания . Есть много дураков в этом вопросе.
  • 2
    Здесь много запаха кода: int * sth и & pointer
Теги:
operators

2 ответа

7
Лучший ответ

Мой вопрос: если первая функция вернет true, будет ли выполняться вторая функция в блоке if?

Нет.

C++ использует оценку короткого замыкания для && и || ,

  • 0
    Чтобы добавить, C ++ использует только оценку короткого замыкания для && и || , не для других операторов. Для & и | , если оба типа операндов - bool , это было бы возможно одинаково. Было бы даже возможно для чего-то вроде & или даже * на целых числах, если известно, что первый операнд равен нулю. Но это не так, как работает C ++.
  • 0
    обновлен ........
Показать ещё 2 комментария
3

Стандарт C++ ГАРАНТИИ, что выражение оценивается слева направо и что, как только выражение может быть известно, дальнейшая оценка не выполняется. Это особенно удобно для таких вещей, как:

if (ptr != NULL && ptr->x > 12) ... 

или

if (x != 0 && y / x > 0) ... 

или даже это должно работать:

if (ptr == NULL || ptr->x > 12) 

Все вышеперечисленное недействительно, если оценка будет выполнена "полностью".

  • 1
    Если вы не перегружаете оператор || / &&. В этом случае все подвыражения оцениваются.
  • 0
    В этом случае, скорее всего, много кода сломается! Перегрузка этих операторов - довольно плохая идея.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню