Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.94/47: Рейтинг темы: голосов - 47, средняя оценка - 4.94
4 / 4 / 3
Регистрация: 23.10.2012
Сообщений: 233

Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ?

04.07.2013, 00:55. Показов 11903. Ответов 85
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне вот интересно , что скажут люди о Тернарном операторе, которые уже на С++ программируют немало.
Насколько он удобен, много ли экономит пространство кода и стоит ли его применять сильно часто или же тернарный оператор у многих не приживается в дальнейшем.

Да не спорю придумали его наверное не зря, перед какими то задачи он может и удобен, но мне кажется что его используют мало людей
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.07.2013, 00:55
Ответы с готовыми решениями:

Оператор идентичности - когда стоит использовать?
Когда стоит использовать оператор проверки идентичности - ===? Стоит ли его всегда использовать для сравнения строк?

Оператор gets() не хочет выполняться, если перед ним стоит scanf
Всем привет !! Сталкнулся с такой проблемой что оператор gets() нехочет выполнять есле передним стоит scanf вот пример #include...

Как узнать есть ли фронтальная камера на устройстве и если есть, то использовать ее?
Собственно вопрос выше.

85
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
05.07.2013, 16:11
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от taras atavin Посмотреть сообщение
Свич для выбора по результатам сравнения, а тернарный для сравнения.
Так "тернарный" он потому, что три аргумента принимает, а не три результата возвращает.
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
05.07.2013, 16:27
Цитата Сообщение от taras atavin Посмотреть сообщение
должен возвращать один из трёх результатов и быть оператором именно сравнения
хорошо, рассмотрим для примера функцию сигнум (возвращает знак)
sgn(x) =
0, x=0,
-1, x<0,
1, x >0.
как красиво ее описать, только не типа
C++
1
2
3
4
int sgn(double x)
{
   return x ? x / fabs(x) : 0;
}
с другой стороны, это пример того, что можно ухитриться и не писать кучу условий
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
05.07.2013, 16:34
Цитата Сообщение от I love myguitar Посмотреть сообщение
Насколько он удобен, много ли экономит пространство кода и стоит ли его применять сильно часто или же тернарный оператор у многих не приживается в дальнейшем.
ну вот пример где он оправдан
C++
1
printf("Max=%d"A>B?A:B);
или вот кусок кода от Криса Касперски
C++
1
2
3
HWND hwnd;
hwnd = FindWindow(0, "Калькулятор");
printf("hWnd: %Xh\n", (hwnd)?(int)hwnd:0xBAD);
если окно найдено выдается его дескриптор если нет пишется "BAD"
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
05.07.2013, 16:34
Цитата Сообщение от Thinker Посмотреть сообщение
хорошо, рассмотрим для примера функцию сигнум (возвращает знак)
sgn(x) =
0, x=0,
-1, x<0,
1, x >0.
как красиво ее описать, только не типа
Код C++
1
2
3
4
int sgn(double x)
{
* *return x ? x / fabs(x) : 0;
}
с другой стороны, это пример того, что можно ухитриться и не писать кучу условий
Code
1
2
3
4
5
6
7
8
9
10
:= function sgn(:= parametr x is signed integer) is signed integer
function sgn(:= parametr x is signed integer)
begin
     switch (x?0)
     begin
          case less: return -1
          case equal: return 0
          case greater: return 1
     end;
end
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
05.07.2013, 16:37
а я бы так написал
C++
1
2
3
4
int sgn(double x)
{
   return  (x > 0) - (x < 0);
}
и не заморачивался. красиво и симметрично. видите, не всегда надо кучу условий прописывать
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
05.07.2013, 16:45
Цитата Сообщение от ValeryS Посмотреть сообщение
или вот кусок кода от Криса Касперски
...
если окно найдено выдается его дескриптор если нет пишется "BAD"
Крис - известный шутник. Что будем делать, если по несчастливому стечению обстоятельств hwnd == 0xBAD ?
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
05.07.2013, 16:45
ну, это я против правил играю, только что придумал. у кого какие еще варианты есть? так как данные не всегда числовые бывают
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
05.07.2013, 16:47
Цитата Сообщение от Thinker Посмотреть сообщение
а я бы так написал
Код C++
1
2
3
4
int sgn(double x)
{
* *return *(x > 0) - (x < 0);
}
и не заморачивался.
А если bool не на инте? А если true равно 0, или -1? А если читающий не подозревает о числовой основе boolа? У меня же нет ни какой связи с низким уровнем, всё явно и может быть описано в стандарте языка высокого уровня в отрыве от его реализаций и реализаций типов.
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
05.07.2013, 16:50
Цитата Сообщение от taras atavin Посмотреть сообщение
А если bool не на инте? А если true равно 0, или -1? А если читающий не подозревает о числовой основе boolа?
не, это уже придирки к классному алгоритму я там ниже пояснил, что это в данном разделе игра против правил.
1
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
05.07.2013, 16:53
Алгоритм читерский, я тоже могу вотнуть в функцию кусок на асме.
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
05.07.2013, 17:02
Цитата Сообщение от taras atavin Посмотреть сообщение
я тоже могу

Не по теме:

ну так и пользуйтесь этим, не все же по шаблонам делать и сдандартно мыслить, как учат в школе с глупыми, отмороженными, никому ненужными, убивающими творческие способности ЕГЭ...

0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
05.07.2013, 17:25
Цитата Сообщение от taras atavin Посмотреть сообщение
А если bool не на инте? А если true равно 0, или -1? А если читающий не подозревает о числовой основе boolа?
(ухмыляясь) А фиолетово.

bool обязан "уметь" преобразовываться в int, причем не абы как, а точно по Стандарту (4.7): false = 0, true = 1.
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
05.07.2013, 17:58
Только в исходнике о преобразовании ни слова, а о такой тонкости стандарта можно во-первых не знать, а во-вторых во многих языках определено смешнее.
false равен 0, true не равен false
. Всё. А ещё бывает
false равен 0, у true все биты противоположны
. Единичный true - не аксиома, а выбор.

Добавлено через 7 минут
А можно слепить язык, в котором нулю будет равен true. Или даже так. Есть указатель nullptr, на пк это ноль, а на сигнальных адрес больше всех валидных. Берём тот же код за false ради упрощения и ускорения проверки указателя на
Code
1
if (ptr)
, а true получаем инверсией всех бит. Выбор кодов внутреннего представления булевых значений и целых значений, к которым они приводятся, - произвол, закрепление его в стандарте одного языка не решает проблемы возможного не знания такого пункта стандарта тем, кому исходник на глаза попасться может, но кто сам специалистом по языку не является.
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
05.07.2013, 18:03
Дык, о других языках можно рассуждать, конечно.... но ведь эта часть форума именуется "Форум C++ > Форум С++ для начинающих", не так ли?
2
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
05.07.2013, 18:18
А ничего, что здесь нет просьбы решить конкретную задачу на c++, зато есть обсуждение самого языка и конкретного оператора в нём? Нужен ли он вообще и каким должен быть. А отсюда и вопросы сложности миграции программистов с других языков, и проблемы обсуждения исходника с тем, кто алгоритмически мыслить может, но на плюсах писать не умеет и не собирается. if then else, или хотябы
C++
1
2
3
4
5
6
7
8
if ()
{
 
}
else
{
 
}
в этом плане проще, а читерская конструкция через инт, наоборот, ещё сложней.

Добавлено через 6 минут
Моя версия sgn тоже будет вовсе не на тернарном сравнении, а
Code
1
2
3
4
5
:= inline function signe(:=parametr x is signed int) is sigened int
inline function signe(:=parametr x is signed int)
begin
     return ((signed int)(x>0 as boolean))-((signed int)(x<0 as boolean))
end
. Но это читерство будет глубоко спрятано ото всех, кто будет её юзать.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
05.07.2013, 18:22
Цитата Сообщение от taras atavin Посмотреть сообщение
Нужен ли он вообще
именно для
Цитата Сообщение от taras atavin Посмотреть сообщение
и вопросы сложности миграции программистов с других языков
о Си речь. Сиречь о истории... история. И о языке.
Да и чем это плохо, если есть возможность.
C++
1
2
3
int a[]={1, 2, 3, 4};
cout<<"Список инициализации массива\na[]= ";
for(int i=0; i<4; ++i) cout<<( !i ? "{" : " " ) << a[i] << ( i==3 ? "};" :"," );
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
05.07.2013, 18:23
Кстати, оно не будет работать, если false=-1, а true=1.
0
05.07.2013, 18:27
 Комментарий модератора 
Так, давайте впредь обсуждать лишь необходимость использования тернарной операции в программах.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
05.07.2013, 18:28
taras atavin, Все-таки это раздел C++, а не раздел "рандомный язык", так что false преобразуется в 0, а true в 1
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
05.07.2013, 18:49
Цитата Сообщение от taras atavin Посмотреть сообщение
а во-вторых во многих языках определено смешнее. . Всё. А ещё бывает . Единичный true - не аксиома, а выбор.
а еще не во всех языках есть "? :". так что, это означает, что тема закрыта?! как мы можем обсуждать то, что не везде есть. давайте темы по мат.логике забабацаем, уж она то во всех языках присутствует, вернее, на ее основе они и базируются.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.07.2013, 18:49

Где стоит использовать bootstrap и стоит ли вообще использовать CSS фреймворки?
Здравствуйте. Лично я ужасаюсь ковырять стили, когда к сайту подключен bootstrap и мало понимаю, чем он хорош вообще. В данной теме я бы...

тернарный оператор
понимаю, что вопрос совсем детский, но все таки не могу понять в чем проблема... пример: $a=1; echo...

Тернарный оператор
pagesArray=; haveCover=(bitmapArr==undefined); var firstPage:Number=haveCover?1:0; //Что это? for(var...

Тернарный оператор
Изучая php наткнулся на такую вещь, как тернарный оператор. Увидел, что его запись намного проще обычной конструкции if-else. Но вопрос...

Тернарный оператор
Добрый день, как доказать, что нету тенарного оператора ? Я как понимаю, есть только тенарная операция, которая представляет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru