Форум программистов, компьютерный форум 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
1791 / 1506 / 540
Регистрация: 24.04.2014
Сообщений: 4,238
09.08.2014, 10:22     Является ли тернарный оператор оператором сравнения? #21
Mr.X, а разве < и > не являются операторами сравнения?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
09.08.2014, 11:21     Является ли тернарный оператор оператором сравнения? #22
Mr.X, как я понял, как раз < и > использовать нельзя.
Mr.X
Эксперт С++
 Аватар для Mr.X
2803 / 1579 / 247
Регистрация: 03.05.2010
Сообщений: 3,673
09.08.2014, 11:58     Является ли тернарный оператор оператором сравнения? #23
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Mr.X, а разве < и > не являются операторами сравнения?
Цитата Сообщение от Nameless One Посмотреть сообщение
Mr.X, как я понял, как раз < и > использовать нельзя.
А, пардон, не уловил всей тонкости. Тогда вот так можно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
/////////////////////////////////////////////////////////////////////////////////////////
typedef double     T_type;
/////////////////////////////////////////////////////////////////////////////////////////
int     main()
{
    for(;;)
    {
        T_type  a   =   0;
        std::cout   <<  "a = ";
        std::cin    >>  a;
 
        T_type  b   =   0;
        std::cout   <<  "b = ";
        std::cin    >>  b;
 
        switch  (
                    int (
                            a - b
                                ?   ( a - b ) / abs( a - b )
                                :   0
                        )
                )
        {
            case    1:
                std::cout   <<  ">";
                break;
 
            case    -1:
                std::cout   <<  "<";
                break;
 
            default:
                std::cout   <<  "==";
        }
        std::cout   <<  std::endl
                    <<  std::endl
                    <<  std::endl;
    }//for
}
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
09.08.2014, 13:20     Является ли тернарный оператор оператором сравнения? #24
Цитата Сообщение от Mr.X Посмотреть сообщение
Тогда вот так можно:
Только если считать, что abs реализована без сравнения с нулём Для целых чисел это точно возможно.
Mr.X
Эксперт С++
 Аватар для Mr.X
2803 / 1579 / 247
Регистрация: 03.05.2010
Сообщений: 3,673
09.08.2014, 13:32     Является ли тернарный оператор оператором сравнения? #25
Цитата Сообщение от Nameless One Посмотреть сообщение
Только если считать, что abs реализована без сравнения с нулём Для целых чисел это точно возможно.
Ну, в задаче не велено об этом задумываться. Да и задачи-то, собственно, нет, сами читатели темы ее придумали.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
09.08.2014, 13:42     Является ли тернарный оператор оператором сравнения? #26
Цитата Сообщение от Mr.X Посмотреть сообщение
Да и задачи-то, собственно, нет, сами читатели темы ее придумали.
Всё таки не читатели, а писатели:
Цитата Сообщение от mmeexx Посмотреть сообщение
То есть при условии "не использовать операторы сравнения" сранить два числа, то можно использовать тернарный оператор?
Mr.X
Эксперт С++
 Аватар для Mr.X
2803 / 1579 / 247
Регистрация: 03.05.2010
Сообщений: 3,673
09.08.2014, 14:44     Является ли тернарный оператор оператором сравнения? #27
Цитата Сообщение от Tulosba Посмотреть сообщение
Всё таки не читатели, а писатели:
Цитата Сообщение от mmeexx Посмотреть сообщение
То есть при условии "не использовать операторы сравнения" сранить два числа, то можно использовать тернарный оператор?
А, ну эту задачу моя программа решает.
Vtulhu
369 / 375 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
10.08.2014, 14:25     Является ли тернарный оператор оператором сравнения? #28
Тернарный оператор удобен, когда надо сделать что-то, грубо говоря, в одной строчке. Например, присвоить константной переменной значения, зависящее от некоего условия. Или для выбора параметра функции.

C
1
2
const double min_ab = ( a < b )? a : b;
puts(( a < b )? "lower" : "higher");
Вот как это все будет выглядеть без тернарного оператора:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
double min_ab = a;                  // обратите внимание, const теперь невозможен
if( b < min_ab ) { min_ab = b; } // я считаю, что ставить консты надо везде, где можно
 
// то есть я действую не по принципу "пиши const, если это должна быть константа",
// а по принципу "убирай const только если уверен, это должна быть переменная"
 
if( a < b ) {
    puts("lower");
} else {
    puts("higher");
}
 
Это еще не ужос-ужос, ведь есть еще любители Оллмана и 1TBS, которые напишут восемь строк:
 
if( a < b )
{
    puts("lower");
}
else
{
    puts("higher");
}
Mr.X
Эксперт С++
 Аватар для Mr.X
2803 / 1579 / 247
Регистрация: 03.05.2010
Сообщений: 3,673
10.08.2014, 18:00     Является ли тернарный оператор оператором сравнения? #29
Цитата Сообщение от Vtulhu Посмотреть сообщение
Это еще не ужос-ужос, ведь есть еще любители Оллмана и 1TBS, которые напишут восемь строк:
Не знаю, мне для ясности кода даже строчек не жалко (а что, они нынче подорожали?), а вот сишная расстановка скобок - это действительно ужас ужасный.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6172 / 2901 / 284
Регистрация: 04.12.2011
Сообщений: 7,715
Записей в блоге: 3
10.08.2014, 19:23     Является ли тернарный оператор оператором сравнения? #30
Цитата Сообщение от Vtulhu Посмотреть сообщение
Тернарный оператор удобен, когда надо сделать что-то, грубо говоря, в одной строчке.
Тренарныйная опрератороперация в отличие от пары условных операторов не ветвит поток управления, а возвращает значение. И делает она это в фрейме стека, где применена. Это должно быть быстрее. Кроме того, как уже говорили, возвращаемое значение может инициализировать ссылку. Константы инициализированные таким способом, не являются константным выражением в применении, но тоже возможны как вариант.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
int main()
{
int a, b ;
cin >> a;
cin >> b;
const int n = a>b? b : a ;
//n++; ведёт себя как константа, то есть на стадии компиляции не позволяет себя изменить
//int c[n]; но всё же это не полноценная константа (без этой строки компилируется и понятно почему))
 
cout<<endl;
cin.get();
return 0;
}
В принципе с учётом возможной оптимизации, выражение с if-else, наверное может дать такой же код как и тренарная, в случаях когда они взаимозаменяемы. Тут не уверен. Нет опыта.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.08.2014, 19:58     Является ли тернарный оператор оператором сравнения?
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
DrOffset
6458 / 3832 / 885
Регистрация: 30.01.2014
Сообщений: 6,627
10.08.2014, 19:58     Является ли тернарный оператор оператором сравнения? #31
Цитата Сообщение от IGPIGP Посмотреть сообщение
выражение с if-else, наверное может дать такой же код как и тренарная
Может вполне. Но чем старее компилятор, тем меньше вероятность, что он сам догадается.

PS.

Не по теме:

По сообщениям в интернете создается впечатление, что "старый компилятор" - это не проблема. Казалось бы обновись, да и все. Но это иллюзия. За 25 с лишним лет было написано огромное количество кода. И не всякий менеджмент рискнет бюджетом на перевод огромных проектов на новые версии. Так что legacy пока диктует правила.

Yandex
Объявления
10.08.2014, 19:58     Является ли тернарный оператор оператором сравнения?
Ответ Создать тему
Опции темы

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