Форум программистов, компьютерный форум CyberForum.ru

Является ли тернарный оператор оператором сравнения? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
mmeexx
0 / 0 / 0
Регистрация: 09.10.2013
Сообщений: 159
08.08.2014, 22:37     Является ли тернарный оператор оператором сравнения? #1
Является ли тернарный оператор оператором сравнения? Подскажите пожалуста
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2014, 22:37     Является ли тернарный оператор оператором сравнения?
Посмотрите здесь:

C++ Засунуть в тернарный оператор
Тернарный оператор vs if/else C++
C++ Шахматы(заменить тернарный оператор) на if else
C++ Альтернатива if (.) {.} (тернарный оператор)
Тернарный оператор: возврат значения C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jewbacabra
1787 / 1502 / 538
Регистрация: 24.04.2014
Сообщений: 4,215
08.08.2014, 22:42     Является ли тернарный оператор оператором сравнения? #2
mmeexx, нет
orange_fox
 Аватар для orange_fox
34 / 34 / 6
Регистрация: 06.04.2014
Сообщений: 189
08.08.2014, 22:51     Является ли тернарный оператор оператором сравнения? #3
Скорее - краткая форма условного оператора:
C++
1
2
3
4
if(a>b) a += 5;
else a+=6;
 
a+=(a>b)?5:6;
mmeexx
0 / 0 / 0
Регистрация: 09.10.2013
Сообщений: 159
08.08.2014, 22:54  [ТС]     Является ли тернарный оператор оператором сравнения? #4
То есть при условии "не использовать операторы сравнения" сранить два числа, то можно использовать тернарный оператор?
Etien
20 / 20 / 0
Регистрация: 26.01.2014
Сообщений: 176
08.08.2014, 23:05     Является ли тернарный оператор оператором сравнения? #5
Тринарный оператор - одна из "находок" С. Хотя иногда использую, но не потому что без него нельзя, а просто чтобы совсем не забыть что такое вот есть. Его необходимость сам внятно объяснить не могу и ни от кого внятного объяснения не слышал. А работаю с С - уже запамятовал с какого года.
Помните, что он есть, и не заморачивайтесь особо.

Всегда Ваш - Etien.
DrOffset
6422 / 3796 / 878
Регистрация: 30.01.2014
Сообщений: 6,585
08.08.2014, 23:20     Является ли тернарный оператор оператором сравнения? #6
Цитата Сообщение от Etien Посмотреть сообщение
Его необходимость сам внятно объяснить не могу и ни от кого внятного объяснения не слышал.
Ну, например, ссылку без него не иницализировать по условию:
C++
1
int & ref = isA ? foo() : bar();
А вот так нельзя:
C++
1
2
3
4
5
int  & ref;
if(isA)
   ref = foo();
else
   ref = bar();
orange_fox
 Аватар для orange_fox
34 / 34 / 6
Регистрация: 06.04.2014
Сообщений: 189
08.08.2014, 23:23     Является ли тернарный оператор оператором сравнения? #7
mmeexx, имхо нет, т.к. внутри тернарного оператора будет сравнение:
C++
1
a>b?"yes":"no
DrOffset
6422 / 3796 / 878
Регистрация: 30.01.2014
Сообщений: 6,585
08.08.2014, 23:23     Является ли тернарный оператор оператором сравнения? #8
Etien, а еще он позволяет избежать копипаста, например в таком случае:
C++
1
bar(a, b, c, isA ? foo1() : foo2());
против
C++
1
2
3
4
if(isA)
    bar(a, b, c, foo1());
else
    bar(a, b, c, foo2());
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
08.08.2014, 23:42     Является ли тернарный оператор оператором сравнения? #9
Цитата Сообщение от mmeexx Посмотреть сообщение
тернарный оператор оператором сравнения?
Conditional operator, conditional-expression
Etien
20 / 20 / 0
Регистрация: 26.01.2014
Сообщений: 176
08.08.2014, 23:54     Является ли тернарный оператор оператором сравнения? #10
Нет, я конечно согласен, что есть случаи, когда наличие тринарного удобнее. Сам иногда использую. Но нет случаев, когда какое-либо ветвление можно сделать только им и ни чем иным. Ну может быть некоторая потеря в элегантности. Опираюсь конечно на опыт собственный. Возможно он характерен только для моих задач.

Всегда Ваш - Etien.
DrOffset
6422 / 3796 / 878
Регистрация: 30.01.2014
Сообщений: 6,585
09.08.2014, 00:44     Является ли тернарный оператор оператором сравнения? #11
Цитата Сообщение от Etien Посмотреть сообщение
Но нет случаев, когда какое-либо ветвление можно сделать только им и ни чем иным.
Ну вот инициализация ссылки чем не пример?
Etien
20 / 20 / 0
Регистрация: 26.01.2014
Сообщений: 176
09.08.2014, 00:56     Является ли тернарный оператор оператором сравнения? #12
Dидимо я сделал бы не через инициализацию ссылки, а через указатель на функцию.
Как уже говорил - нет задач, которые можно решить только им. Остальное - дело вкуса.
Всегда Ваш - Etien.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6160 / 2889 / 282
Регистрация: 04.12.2011
Сообщений: 7,689
Записей в блоге: 3
09.08.2014, 01:04     Является ли тернарный оператор оператором сравнения? #13
сравнить на равенство можно так:
C++
1
2
3
4
int a, b;
//что-то им присваивается
if(abs(a-b)) cout<<"a is not equal b"<<endl;
else cout<<"a is equal b";
DrOffset
6422 / 3796 / 878
Регистрация: 30.01.2014
Сообщений: 6,585
09.08.2014, 01:07     Является ли тернарный оператор оператором сравнения? #14
Цитата Сообщение от Etien Посмотреть сообщение
Как уже говорил - нет задач, которые можно решить только им.
Так про любое средство языка можно сказать. Чем так оператор тернарный выделился?

Добавлено через 59 секунд
Цитата Сообщение от Etien Посмотреть сообщение
Dидимо я сделал бы не через инициализацию ссылки, а через указатель на функцию.
Иногда так сделать нельзя, т.к. концепция использования может диктоваться, например, библиотекой.
Etien
20 / 20 / 0
Регистрация: 26.01.2014
Сообщений: 176
09.08.2014, 01:42     Является ли тернарный оператор оператором сравнения? #15
Без сомнения - можно. Первичны только коды процессора. Даже Assembler вторичен.
Я не говорил, что не нравится. Скорее особой нужности не испытываю. И до сих пор как-то умудрялся жить почти без его использования. И жить вполне сносно. О чем и написал. Возможно есть какие-то ситуации, вроде приведенной Вами. Сам таких ситуаций я стараюсь не создавать, и пока бог миловал, мои задачи позволяют обходиться без. Возможно я при этом что-то и теряю.
А вкусы - вы любите коньяк с лимоном. Я водку и огурчик. При случае я и от коньяка не откажусь, как наверное и Вы от запотевшей стопочки.
Всегда Ваш - Etien.
DrOffset
6422 / 3796 / 878
Регистрация: 30.01.2014
Сообщений: 6,585
09.08.2014, 01:50     Является ли тернарный оператор оператором сравнения? #16
Etien, ну я больше не о вкусах говорил, а вот об этом:
Цитата Сообщение от Etien Посмотреть сообщение
Его необходимость сам внятно объяснить не могу и ни от кого внятного объяснения не слышал
На это мне захотелось привести внятный пример, реалистичный. Я его привел. Собственно спорить о вкусах желания не имел и даже не собирался это делать.
Etien
20 / 20 / 0
Регистрация: 26.01.2014
Сообщений: 176
09.08.2014, 01:59     Является ли тернарный оператор оператором сравнения? #17
Хорошо. Будем считать что Вы привели первый для меня пример уникальной и исключительной надобности этой конструкции. При случае воспользуюсь.
Ваш -Etien.
Mr.X
Эксперт С++
 Аватар для Mr.X
2798 / 1574 / 246
Регистрация: 03.05.2010
Сообщений: 3,651
09.08.2014, 04:23     Является ли тернарный оператор оператором сравнения? #18
Цитата Сообщение от mmeexx Посмотреть сообщение
То есть при условии "не использовать операторы сравнения" сранить два числа, то можно использовать тернарный оператор?
А почему нет-то?
C++
1
bool  a_less_b = a < b ? true : false;
Добавлено через 4 минуты
Цитата Сообщение от orange_fox Посмотреть сообщение
Скорее - краткая форма условного оператора
Скорее нет, чем да. Не всякий условный оператор можно записать через тернарный, и не всякий тернарный через условный.

Добавлено через 21 минуту
Хотя официальная терминология несколько другая: условный оператор - это как раз тернарный, а if-else - это инструкция выбора.
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,391
09.08.2014, 06:37     Является ли тернарный оператор оператором сравнения? #19
Цитата Сообщение от Mr.X Посмотреть сообщение
А почему нет-то?
У тебя там используется оператор <, так что нельзя.

C++
1
2
3
4
5
6
7
    int diff = a - b;
 
    const char *comp =
        diff & 1 << sizeof diff - 1 ? "lesser than" :
        !(diff | 0) ? "equal to" : "greater than";
 
    std::cout << "a is " << comp << " b" << std::endl;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2014, 10:12     Является ли тернарный оператор оператором сравнения?
Еще ссылки по теме:

C++ Тернарный оператор - найти ошибку в коде
C++ Как работает тернарный оператор
Тернарный оператор и операторы безусловного перехода C++

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

Или воспользуйтесь поиском по форуму:
Mr.X
Эксперт С++
 Аватар для Mr.X
2798 / 1574 / 246
Регистрация: 03.05.2010
Сообщений: 3,651
09.08.2014, 10:12     Является ли тернарный оператор оператором сравнения? #20
Цитата Сообщение от Nameless One Посмотреть сообщение
C++
1
2
3
4
5
6
7
int diff = a - b;
 
const char *comp =
    diff & 1 << sizeof diff - 1 ? "lesser than" :
    !(diff | 0) ? "equal to" : "greater than";
 
std::cout << "a is " << comp << " b" << std::endl;
Не, тут не только тернарный используется. Вот так нужно:
C++
1
2
3
4
5
std::cout   <<  (a < b)
                    ?   "<"
                    :   (a > b)
                            ?   ">"
                            :   "==";
Yandex
Объявления
09.08.2014, 10:12     Является ли тернарный оператор оператором сравнения?
Ответ Создать тему
Опции темы

Текущее время: 01:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru