1 / 1 / 0
Регистрация: 15.04.2013
Сообщений: 29
|
||||||
1 | ||||||
Разъяснение по приоритетам операций С++25.01.2014, 00:37. Показов 1723. Ответов 21
Метки нет Все метки)
(
Здравствуйте! Вот смотрю я в таблицу http://ru.cppreference.com/w/c... precedence, оператор префиксный инкремент и декремент стоит на 3 позиции, а сложение и вычитание на 6 тогда условный оператор давал бы true, но он дает false, я так понимаю это связано с ассоциативностью, как она влияет на таблицу, что означает слева-направо справа-налево, как правильно пользоваться таблицей?
0
|
|
25.01.2014, 00:37 | |
Ответы с готовыми решениями:
21
Вывод статистики по приоритетам Клиент-сервер. Как расставить клиентов по приоритетам? Разъяснение Разъяснение по ТЗ |
382 / 280 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
|
25.01.2014, 00:43 | 2 |
К слову, в вашем коде нет ни одного префиксного инкремента/декремента
Слева направо значит, что все операции, согласно их приоритету, выполняются слева направо Справа налево - с точностью до наоборот
1
|
Форумчанин
![]() ![]() 8194 / 5044 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
||||||
25.01.2014, 00:45 | 3 | |||||
А проверка <= стоит на 8.
9 строка равносильна:
Добавлено через 1 минуту на момент проверки a = 2, b = 2, c = 1. 2 <= 2-1 <==> 2 <= 1 Ложь.
1
|
1 / 1 / 0
Регистрация: 15.04.2013
Сообщений: 29
|
||||||
25.01.2014, 01:00 [ТС] | 4 | |||||
Ок тогда так
2 <= 2-0 <==> 2 <= 2 True. На выходе 2 2 0, а должно быть 3 1 2 Добавлено через 5 минут gromo, Простите перепутал
0
|
1 / 1 / 0
Регистрация: 15.04.2013
Сообщений: 29
|
|
25.01.2014, 01:08 [ТС] | 6 |
Так я логично и задаю вопрос, почему операция постфиксный инкремент выполняется после операции вычитание, если его приоритет выше?
0
|
Форумчанин
![]() ![]() 8194 / 5044 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
25.01.2014, 01:11 | 7 |
programmer92ua, инкремент выполняется уже после проверки условия. Мое сообщение выше по поводу значений на момент проверки неверно
![]() На момент проверки в a = 2, b = 1, c = 0. Сразу после проверки значение b увеличивается на единицу. Кстати, для префиксного инкремента условие бы выполнилось. Добавлено через 59 секунд То есть постфиксные операции выполняются по выходу из логического блока или же до завершения инструкции.
0
|
382 / 280 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
|
25.01.2014, 01:14 | 8 |
Высокий Приоритет постфиксного инкремента будет играть роль, возможно, в каких-нибудь экзотических конструкциях, состоящих из множества унарных операций, коим и является этот ваш инкремент.
В вашем случае такое поведение обусловлено самой природой этого оператора - он увеличивает значение переменной только после того, как оно употребилось в контексте какой-то операци.
1
|
1 / 1 / 0
Регистрация: 15.04.2013
Сообщений: 29
|
|
25.01.2014, 01:17 [ТС] | 9 |
Вот вот, я тоже понял что неверно, для префиксного инкремента я согласен выполняется, потому что я смотрю таблицу и вижу что он стоит на 3. Но почему? если постфиксные операции стоят еще выше по приоритету?
0
|
Неэпический
|
|||||||||||
25.01.2014, 01:21 | 11 | ||||||||||
потому что префиксные сначала инкреминируют, а потом возвращают значение.
Постфиксные - сначала возвращают значение, а потом инкреминируют. префиксные:
1
|
1 / 1 / 0
Регистрация: 15.04.2013
Сообщений: 29
|
|
25.01.2014, 01:22 [ТС] | 12 |
спс за ответ, это то что я и хотел спросить, но что теперь получается, мне как программисту которому сразу тяжело понять экзотическая это ситуация или нет, а если я еще какой-то пример найду, а там будет экзотически себя вести другой оператор, то я вообще запутаюсь, тут нужно обладать опытом чтобы сразу понять, тогда данная таблица например мне, что и было доказано в примере не помогла понять почему произошло именно так. Может есть более детальная таблица которая учитывает эти экзотические моменты?
0
|
1 / 1 / 0
Регистрация: 15.04.2013
Сообщений: 29
|
|
25.01.2014, 01:24 [ТС] | 14 |
да я понимаю как они работаю и в чем разница между ними, просто суть вопроса в другом я отписал выше.
0
|
25.01.2014, 01:27 | 15 |
При чём тут вообще приоритет операций? Тут надо автору смотреть на отличия префиксного инкремента от постфиксного!
И приоритет далеко не главное их отличие (и в данном примере роли не играет)
0
|
1 / 1 / 0
Регистрация: 15.04.2013
Сообщений: 29
|
|
25.01.2014, 01:36 [ТС] | 16 |
Тогда почему он не стоит на последнем месте в таблице?
Добавлено через 9 минут Я еще раз объясняю, я знаю разницу между ними, этот пример я составил себе сам, просто посмотрел в таблицу на приоритет он выше чем у вычитания, и подумал тогда почему он стоит выше, и задал вопрос логичный, а вы мне про то какое отличие между постфиксной и префиксной.
0
|
1 / 1 / 0
Регистрация: 15.04.2013
Сообщений: 29
|
|||||||||||
25.01.2014, 01:54 [ТС] | 18 | ||||||||||
![]()
Добавлено через 5 минут Ахахах, меня осенило, как оператор он выполниться самый первый, просто по своей сути он изменит значение после проверки.
0
|
Неэпический
|
|||||||||||
25.01.2014, 01:58 | 19 | ||||||||||
угу.
А теперь возьмите это: и пройдите по своему коду:
![]()
0
|
1 / 1 / 0
Регистрация: 15.04.2013
Сообщений: 29
|
|
25.01.2014, 02:02 [ТС] | 20 |
Вот реально понимать разницу можно про разному, вот теперь я действительно понял, и мне не понятно почему Kuzia domovenok говорит причем тут приоритет, разве я не прав когда сейчас говорю что постфиксный оператор выполняется первый в моем примере и заставляет возвратить значение переменной вот что он делает, а уже потом выполняет инкремент, он выполняет 2 действия, и 1 приходится по приоритету на 2 месте, теперь правильно?
0
|
25.01.2014, 02:02 | |
Помогаю со студенческими работами здесь
20
Необходимо разъяснение Разъяснение новичку! Разъяснение float f = 1.2F; Разъяснение по коду требуетс разъяснение Разъяснение скрипта Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |