Форум программистов «Весельчак У»
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
Начало
Наши сайты
Галерея
Весельчак У
Наша Вики
Хранилище
Проекты
Правила
Правила форума
Правила русского языка
Помощь
Поиск
Календарь
Почта
Войти
Регистрация
Форум программистов «Весельчак У»
>
Учимся программировать
>
Начинающим
(Модератор:
Sla
) > Тема:
[C++] Условия
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: [C++] Условия (Прочитано 9639 раз)
0 Пользователей и 1 Гость смотрят эту тему.
The Nameless One
Помогающий
Offline
Пол:
[C++] Условия
«
:
29-12-2009 00:30 »
Привет, с наступающим всех!
Подскажите, пожалуйста, являются ли следующие два фрагмента кода полностью эквивалентными для компилятора?
Код:
if( a<5 )
{
if ( a != 2 ) Do();
}
и
Код:
if (a <5 && a != 2 ) Do();
В том смысле, что если условие a < 5 не истинно, то следующее после && даже не будет тестироваться?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
Re: [C++] Условия
«
Ответ #1 :
29-12-2009 04:15 »
да.
Кстати, по этой причине вполне законно написать так:
Код:
if(p && p->F())
{
}
и программа не упадёт, так как сначала будет проверка на нулевой указатель. Правда, может упасть, если указатель корявый ))
Записан
>FAQ ПО ПРОГР.
>ССЫЛКИ ПО ПРОГР.
>Правила"Неотложки"
Sla
Модератор
Offline
Пол:
Re: [C++] Условия
«
Ответ #2 :
29-12-2009 07:37 »
Эквивалентность зависит от реализации.
Бывают моменты, когда нужно выполнять "участок" сравнения ВСЕГДА одинаковое количество шагов (циклов), или ПРЕДСКАЗУЕМО одинаковое.
Записан
Мы все учились понемногу... Чему-нибудь и как-нибудь.
darkelf
Молодой специалист
Offline
Re: [C++] Условия
«
Ответ #3 :
29-12-2009 07:58 »
Цитата: Sla от 29-12-2009 07:37
Эквивалентность зависит от реализации.
Вроде как по стандарту - не зависит, а должна выполняться всегда.
6.5.13 Logical AND operator
...
4 Unlike the bitwise binary & operator, the && operator guarantees left-to-right evaluation;
if the second operand is evaluated, there is a sequence point between the evaluations of
the first and second operands.
If the first operand compares equal to 0, the second
operand is not evaluated
.
Записан
Антон (LogRus)
Глобальный модератор
Offline
Пол:
Внимание! Люблю сахар в кубиках!
Re: [C++] Условия
«
Ответ #4 :
29-12-2009 08:01 »
darkelf
, поддерживаю, стандарт требует, что бы проверки выполнялись слева на право и более чем нужно для получения результата.
Записан
Странно всё это....
Sla
Модератор
Offline
Пол:
Re: [C++] Условия
«
Ответ #5 :
29-12-2009 08:08 »
Ребятки, я не говорю о стандарте компиляторов и прочего.
Я говорю о программной реализации.
The Nameless One
, ты занимаешься не тем, пытаешься найти каких-то блох в собачьей шкуре.
Ведь ты пишешь софт для управления/контроля чем-то/чего-то. Вот и обрати внимание больше на это что-то.
Записан
Мы все учились понемногу... Чему-нибудь и как-нибудь.
The Nameless One
Помогающий
Offline
Пол:
Re: [C++] Условия
«
Ответ #6 :
29-12-2009 09:36 »
Спасибо всем:)
Sla
, ну почему же сразу блох?
Проект - проектом, но очень хочется постепенно разобраться в тонкостях языка, иначе как стать настоящим профи?
Записан
Sla
Модератор
Offline
Пол:
Re: [C++] Условия
«
Ответ #7 :
29-12-2009 09:51 »
я даже придумал ( надумал)
Есть некие внешние регистры устройства, которые доступны к записи, только после того как с них прочитали информацию.
есть функция чтения этих регистров
F(address:word) {
}
If ( F(0x1) && F(0x2) )
{
}
Такой код наглядней, чем
temp01 = F(0x1)
temp02 = F(0x2)
If ( temp01 && temp02 )
{
}
Экономится ли при этом память? Надо смотреть.
Но с другой стороны второй код - и есть "обход" "ограничений" компилятора.
Записан
Мы все учились понемногу... Чему-нибудь и как-нибудь.
darkelf
Молодой специалист
Offline
Re: [C++] Условия
«
Ответ #8 :
29-12-2009 10:18 »
это не ограничения, а "фичи", и, наверное, не компилятора, а стандарта.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Форум программистов «Весельчак У»
>
Учимся программировать
>
Начинающим
(Модератор:
Sla
) > Тема:
[C++] Условия
Загружается...