![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Ln78 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 25.11.2006 Репутация: 13 Всего: 15 |
||||
|
||||
inside_pointer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: 5 Всего: 12 |
почему она будет так выполняться, каким образом она проверит, что первый операнд правдив, по какому правилу ? что значит зависимые операции ? Ln78, он спросил так, как спросил - не разыменуется ли нулевой указатель ![]() |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
по такому правилу: если в результате вычисления выражения мы получим 0 - то FALSE, иначе - TRUE http://forum.vingrad.ru/index.php?showtopi...t&p=1831461 |
|||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
те которые имеют общий операнд. 10-2*3 // - и * зависымые и вначале выполнится умножение потом вычитание10 10-5+2*3 // - и * не зависимы друг от друга и порядок их выполнения не определен.
воэьмем пример : a && ++b; у ++ приоритет больше, но до нее дойдет только если а is true т.е вышеупомянутое выражение разбивается на операции следующим условным образом
inside_pointer, и вдумайтесь так же, что написал Ln78 Это сообщение отредактировал(а) mes - 4.4.2009, 10:26 |
||||
|
|||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
||||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
я знаю! я знаю! можно я отвечу! можно!? можно!? ![]() |
|||
|
||||
inside_pointer |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: 5 Всего: 12 |
это 10-5+(2*3), не определён порядок для операции +, то есть может выполниться как и умножение сначала, так и вычитание однако не будет чего-нибудь типа 10-(5+2)*3 или ((10-5)+2)*3, то есть операции по приоритетам выстроены однозначно
почему вот здесь, когда у && низкий приоритет, не может быть такого, что выполнится -> ? zim22, понимаешь у них приоритет разный у -> самый высокий, а у && чуть ли не как у присваивания и тут получается, что у неё приоритет не выше, чем у ->, так как, действительно, метод бы вызывался из 0 или 1, но при этом есть какое-то правило, которое выше приоритета, а формулировки его чо-то не видно, почему оно выше приоритета |
||||
|
|||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
||||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
йес! && - это логическая бинарная операция , - это оператор, который используется в случаях, где ряд выражений отделяется запятыми. Выполнены будут все операнды оператора в отличии от &&, где второй операнд будет выполнен, только если первый операнд был true А вообще это две разные операции, которые никак друг с другом не связаны. и они не взаимозаменяемы ![]() Добавлено через 1 минуту и 26 секунд вы не могли бы как-то выделять обращение ко мне. а то я еле нашёл в тексте, что вы и мне отвечали. Это сообщение отредактировал(а) zim22 - 4.4.2009, 13:41 |
|||
|
||||
mes |
|
||||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
zim22, GoldFinch спрашивал немножко не об этом.
его интересовало, почему "," не всегда оператор. Потому что иногда она является обычным разделителем, например в списке параметров. ![]() |
||||||
|
|||||||
inside_pointer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: 5 Всего: 12 |
да там инфа не важная, если пропустишь, ничо не изменится ![]() |
|||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Как раз для + определен. Она выполнится 3й. После - и *. А вот кто из последних двух выполнится первым не определено. А вот в выражении (10-5) && (2*3) порядок определен. Первым выполнится -, потом (если условие верно) выполнится *, и самым последним &&. Как видите приоретет в случае не связанных операций влияния на порядок исполнения не оказывает. Добавлено @ 14:46
правило которое отличает + от && в только что упомянутом примере уже цитировалось в этой теме. Попробуйте найти его сами ![]() Это сообщение отредактировал(а) mes - 4.4.2009, 14:57 |
||||
|
|||||
inside_pointer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: 5 Всего: 12 |
а, тут типа слева направо происходят все вычисления, то есть разность будет найдена самой первой, так как её приоритет выше &&, сначала не будет проверено что (10-5) истина, сначала выполнится 10-5 а потом этот результат будет проверен, так как встречается следующая операция - && в итоге получаем, что значения в скобках читаются, а потом выполнение выражений внутри начинается слева направо (есть там логические операции или нет) |
|||
|
||||
mes |
|
||||||||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
нет, нет и еще раз нет. приоретет нужен всего лишь чтоб разбить на пары:
логично предположить что для оператора && тогда должна получиться аналогичная последовательность действий
однако из за того, что компилятoр должен соблюдать правило сокращенных вычислений, получается так
можно подойти еще с другого конца так например
а теперь попробуйте записать в такой же форме выражение (10-5)&& (2*3) с соблюдением вышеназванного правила ![]() Это сообщение отредактировал(а) mes - 6.4.2009, 02:04 |
||||||||||
|
|||||||||||
inside_pointer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: 5 Всего: 12 |
Всё, терь кое-что проясняется
![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |