реклама на сайте
подробности

 
 
> тернарный оператор
DASM
сообщение Oct 8 2013, 08:19
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



int test=2, a = 55, b = 22;
(test==1) ? a = 1 : b = 2;
printf("%d %d\n", a, cool.gif;
В голоМ С некорректна (С99) тоже, как я понимаю вопрос приоритетов (они в одной строчке)
Но в С++ проходит без единой запинки, да еще и выдает вполне ожидаемые результаты. Это что за сюрприз на старости лет ?



Похоже тут отличие присвоения от иницииализации. Хорошая тема валить на собеседовании
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
DASM
сообщение Oct 8 2013, 10:37
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



не нашел ссылки про разность приоритетов
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Oct 8 2013, 10:48
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(DASM @ Oct 8 2013, 14:37) *
не нашел ссылки про разность приоритетов
Да хоть на вики гляньте в главе "Приоритет операций".


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Oct 8 2013, 20:23
Сообщение #4


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Двоеточие в этом выражении имхо должен иметь приоритет на уровне оператора запятой, то есть самый высокий и выше чем присваивание. Так как разделяет две независимых друг от друга последовательности операций. Интересно, он ещё где-то в Си/Си++ применяется. А вот с оператором "?" тоже странно. При начальном разборе кода слева направо компилятор должен понимать, что далее последуют два независимых выражения, разделённых двоеточием. Соответственно внутри этой конструкции оператор "?" имеет самый высший приоритет, как и ":".


На похожую тему тоже есть интересное выражение вроде ++i++.
Если бы приоритет левого инкремента был выше правого, то вполне себе юзабельное выражение.

Сообщение отредактировал GetSmart - Oct 9 2013, 01:25


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- DASM   тернарный оператор   Oct 8 2013, 08:19
- - Сергей Борщ   Ничего не понял. Что ожидали, что получили, какие ...   Oct 8 2013, 08:27
- - DASM   Кодint test=1, a = 55, b = 22; (test==1) ?...   Oct 8 2013, 08:58
|- - Сергей Борщ   QUOTE (DASM @ Oct 8 2013, 11:58) Каков ре...   Oct 8 2013, 09:17
- - ViKo   У оператора присваивания ( = ) приоритет ниже, чем...   Oct 8 2013, 09:06
- - DASM   Я думаю тут вопрос не в приоритете, а в том, что С...   Oct 8 2013, 09:38
|- - Сергей Борщ   QUOTE (DASM @ Oct 8 2013, 12:38) Я думаю ...   Oct 8 2013, 10:03
|- - Сергей Борщ   QUOTE (DASM @ Oct 8 2013, 13:37) не нашел...   Oct 8 2013, 10:52
|- - AHTOXA   Хм. А как же обратная совместимость?   Oct 8 2013, 10:58
- - Genadi Zawidowski   Может, немного прояснит один из тестовых файлов дл...   Oct 8 2013, 21:03
|- - demiurg_spb   Цитата(Genadi Zawidowski @ Oct 9 2013, 01...   Oct 9 2013, 06:34
- - Genadi Zawidowski   Ну сейчас тесты действительно другие были бы. Это ...   Oct 9 2013, 20:00


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th July 2025 - 02:08
Рейтинг@Mail.ru


Страница сгенерированна за 0.01374 секунд с 7
ELECTRONIX ©2004-2016