Форум программистов, компьютерный форум CyberForum.ru

Как оптимизируются логические операторы? - C++

Восстановить пароль Регистрация
 
Pro_ha
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 32
02.09.2013, 06:12     Как оптимизируются логические операторы? #1
Интуиция подсказывает, что компиляторы могут оптимизировать проверку условий. Например:
if(A && B)... В случае, если A==false, то нет смысла тратить процессорное время на проверку второго условия.

Тогда можно избежать лишних IF, например при проверке границ массива.
if((A>=0)&&(array[A]==5))...
В этом случае хотелось бы видеть оптимизацию. Без нее будет ошибка при попытке обратиться за границы массива.

С другой стороны, эта оптимизация может наоборот вызвать сбой логики.
if((A)&&(B++ > 0) )... Здесь нужно, чтоб "B" во время проверки увеличилась на 1. Чего не произойдет, если действует оптимизация.

И вопрос. Как эти случаи регламентированы в стандартах С++ и как компиляторы поступают? И в случае оптимизации могут ли компиляторы проверять логические условия не в том порядке, как ты их написал, а проверяя вначале наименее простые условия?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.09.2013, 06:12     Как оптимизируются логические операторы?
Посмотрите здесь:

C++ Где используются логические операторы && и ||
C++ Логические операторы
C++ Логические операторы в выражениях
Операторы отношений и логические операторы C++
Операторы, как расписать? C++
C++ Поразрядные операторы,операторы сдвига
C++ ifstream: как работают операторы << и >>?
Как правильно записывать условные операторы и как прервать проверку при достижении результата? C++
C++ Перегруженные логические операторы И, ИЛИ
C++ Логические операторы: не понятна таблица
UB и логические операторы C++
Как правильно использовать логические операции в условии оператора if? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12271 / 6958 / 782
Регистрация: 27.09.2012
Сообщений: 17,259
Записей в блоге: 2
Завершенные тесты: 1
02.09.2013, 06:23     Как оптимизируются логические операторы? #2
Цитата Сообщение от Pro_ha Посмотреть сообщение
Как эти случаи регламентированы в стандартах С++ и как компиляторы поступают?
Так и регламентированы:
Как оптимизируются логические операторы?

с остальными аналогично, только букавки меняются
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12271 / 6958 / 782
Регистрация: 27.09.2012
Сообщений: 17,259
Записей в блоге: 2
Завершенные тесты: 1
02.09.2013, 06:25     Как оптимизируются логические операторы? #3
Цитата Сообщение от Pro_ha Посмотреть сообщение
как ты их написал
это left-to-right
Pro_ha
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 32
02.09.2013, 06:46  [ТС]     Как оптимизируются логические операторы? #4
Ясно, значит слева на право.
И применяется оптимизация? Даже если в пропускаемом логическом блоке должна измениться переменная или вызывается функция?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12271 / 6958 / 782
Регистрация: 27.09.2012
Сообщений: 17,259
Записей в блоге: 2
Завершенные тесты: 1
02.09.2013, 06:48     Как оптимизируются логические операторы? #5
Цитата Сообщение от Pro_ha Посмотреть сообщение
Даже если в пропускаемом логическом блоке должна измениться переменная или вызывается функция?
Да. Так что стройте подобные конструкции учитывая эту особенность.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5534 / 2568 / 234
Регистрация: 01.11.2011
Сообщений: 6,343
Завершенные тесты: 1
02.09.2013, 09:40     Как оптимизируются логические операторы? #6
Pro_ha, может будет интересно: ленивые вычисления.
Yandex
Объявления
02.09.2013, 09:40     Как оптимизируются логические операторы?
Ответ Создать тему
Опции темы

Текущее время: 01:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru