Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: ошибка при использовании &&  (Прочитано 4082 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Olegator
Команда клуба

ru
Offline Offline
Пол: Мужской

« : 23-08-2005 00:12 » 

Цитата из книги "Как программировать на C++, Дейтел Х., Дейтел П"
Цитата
Выражение, содержащее операции $$ и ||, оцениваются только до тех пор, пока его истинность или ложность не станут очевидной, Таким образом, анализ выражения
gender  == 1 && age >= 65
будет немедленно остановлен, если значение gender не равно 1 (т.е. условие в целом заведомо ложно), и продолжится, если значение gender равно 1 (т.е. в целом может оказаться истинным, если будет истинным условия age >= 65)

Типичная ошибка программирования 2.21
В выражениях, использующих операцию &&, может оказаться, что одно условие – назовём его зависимым - может требовать, чтобы другое условие было значимо при оценке зависимого условия. В этом случае зависимое условие должно быть помещено после другого условия, в противном случае может произойти ошибка.

И что-то я не пойму, в каких случаях эта ошибка может возникнуть?
Может быть так:
x=1;
y=3;
x>2 && (x=y)>0 неправильно
(x=y)>0 && x>2 правильно

« Последнее редактирование: 23-08-2005 00:45 от Olegator » Записан
Hooter
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 23-08-2005 04:46 » 

Ошибка может возникнуть в случае:
Например, у тебя есть массив элементов и тебе необходимо получить доступ к одному из них. Но если ты обратишься к несуществующему элементу - программа сгенерирует искючение. Чтобы этого не оказалось, необходимо сначала проверить количество элементов в массиве.

Код:
if the_array.size() > 0 && the_array[0] > condition

Здесь условие "the_array[0] > condition" - зависимое.  Операция && выполняется слева направо, то есть сначала будет проверено условие the_array.size() > 0, и только после него будет проверено условие the_array[0] > condition.

Типичная ошибка программирования, о которой говорится у Дейтелей, это - смена условий местами. Вот так - неправильно:

Код:
if the_array[0] > condition  && the_array.size() > 0

Если массив пуст, то в таком варианте программа сгенерирует исключение при проверке первого условия, а до второго условия дело не дойдет. Поэтому единственно правильный в данном случае - первый вариант кода.
« Последнее редактирование: 23-08-2005 04:50 от Hooter » Записан
Olegator
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 23-08-2005 04:55 » 

Спасибо я понял.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines