Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2010, 23:41   #1
hundush
 
Регистрация: 05.03.2010
Сообщений: 3
По умолчанию z+=a++-b--==c?d++:c

добрый вечер!
z+=(a++-b--==c)?d++:c не подскажите как правильно читать и понимать подобные вещи? и как компилятор это воспринимает и как происходит анализ? где про это можно прочитать?
Спасибо!

Последний раз редактировалось hundush; 13.09.2010 в 23:42. Причина: ошибка набора
hundush вне форума Ответить с цитированием
Старый 13.09.2010, 23:45   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,219
По умолчанию

Подобные вещи лучше просто не писать.
Arigato вне форума Ответить с цитированием
Старый 13.09.2010, 23:48   #3
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Код:
a = (b < c) ? b : c;
равносильно
Код:
if (b < c)
  a = b;
else
  a = c;
В остальном - смотрим приоритет операторов. Навскидку:
Код:
z += (((a++) - (b--)) == c) ? (d++) : c;
Но это, конечно, не точно. Полный справочник по приоритету операторов вам поможет. Хоть в том же Страуструпе посмотрите.

P.S. Arigato, определенно! А уж если очень надо, то расставлять скобки где только можно.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 13.09.2010, 23:50   #4
hundush
 
Регистрация: 05.03.2010
Сообщений: 3
По умолчанию

да, знаю.
мне интересно это с академической точки зрения.
hundush вне форума Ответить с цитированием
Старый 14.09.2010, 07:51   #5
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

z+=(a++-b--==c)?d++:c

В данном примере z += не выполнится, а выдаст ошибку так как операция "?" не предусматривает присвоения каких либо значений вне пределов функции.
Правильное написание кода:

(a++) - (b--) == c ? z += d++:z += c;

В данном примере обыгрывается примерно такая ситуация:
Если к "а" прибавить единицу, а из "b" вычесть единицу и уменьшить "a" на "b", то при совпадении чисел с "с", присвоить "z" - "d" увеличенное на 1. Если числа не совпадают, ток "z" прибавить "с".
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 14.09.2010, 08:13   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
В данном примере z += не выполнится
Ой, да ну...
p51x вне форума Ответить с цитированием
Старый 14.09.2010, 08:22   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Ой, да ну...
Ну да. Там же точки запятой нет ))))))))))))))))))))))))
Цитата:
Smitt&Wesson
Visual Studio с тобой не согласно (Думаю что Борланд тоже)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.09.2010, 08:49   #8
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Ой, да ну...
Проверил. Суммирует. Спасибо не знал. Нигде в документации не описано, а проверять небыло необходимости.

Насчёт точки с запятой, - это просто описка автора темы.

Вот корректный код, который понятен всем:

(a-b) == c ? z += d++ : z += c;
a++;
b--;
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 14.09.2010 в 08:57.
Smitt&Wesson вне форума Ответить с цитированием
Старый 14.09.2010, 10:14   #9
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,336
По умолчанию

(a-b) == c ? z += d++ : z += c;

это бред. как раз так никто и не пишет
z += (a - b == c) ? d++ : c;
++a;
++b;

а вообще и изначальный код вполне ясен. хоть и есть пост инкремент, но переменные используются по 1 разу, никакой неоднозначности
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 14.09.2010, 18:58   #10
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Цитата:
Сообщение от hundush Посмотреть сообщение
добрый вечер!
z+=(a++-b--==c)?d++:c не подскажите как правильно читать и понимать подобные вещи?
Код:
if( a++ - b-- == c )
  z += d++;
else
  z += c;
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск