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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.69
I love myguitar
4 / 4 / 1
Регистрация: 23.10.2012
Сообщений: 233
04.07.2013, 00:55     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? #1
Мне вот интересно , что скажут люди о Тернарном операторе, которые уже на С++ программируют немало.
Насколько он удобен, много ли экономит пространство кода и стоит ли его применять сильно часто или же тернарный оператор у многих не приживается в дальнейшем.

Да не спорю придумали его наверное не зря, перед какими то задачи он может и удобен, но мне кажется что его используют мало людей
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2013, 00:55     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ?
Посмотрите здесь:

C++ Засунуть в тернарный оператор
Тернарный оператор vs if/else C++
C++ Шахматы(заменить тернарный оператор) на if else
C++ Альтернатива if (.) {.} (тернарный оператор)
Тернарный оператор: возврат значения C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
05.07.2013, 19:37     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? #81
Цитата Сообщение от Croessmah Посмотреть сообщение
false преобразуется в 0, а true в 1
причем если сделать так
C++
1
2
3
4
5
6
bool a=false;
a++;
a++;
a++;
a++;
int b=a;
b будет равно 1 (лично проверял)
инверсия всех бит по моему была давным давно у майкрософта с их типом BOOL который был не чем иным как int
сейчас вроде бы у них макросы
C++
1
2
#define FALSE 0
#define TRUE  1
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
05.07.2013, 19:48     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? #82
Не-не! У Майкрософта BOOL - это #define BOOL int, а bool - это настоящий честный bool.
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
05.07.2013, 21:05     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? #83
Цитата Сообщение от CheshireCat Посмотреть сообщение
Не-не! У Майкрософта BOOL - это #define BOOL int,
ну а я про что?
Цитата Сообщение от ValeryS Посмотреть сообщение
майкрософта с их типом BOOL который был не чем иным как int
Добавлено через 59 минут
вот кусок из вики
В C++ тернарная условная операция имеет тот же синтаксис, что и в Си. Однако за счёт наличия разницы между инициализацией и присваиванием, бывают ситуации, когда операцию ?: нельзя заменить конструкцией if-then-else, как, например, в следующем случае:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
int main(int argc, char** argv)
{
    string name;
    ofstream fout;
    if (argc > 1 && argv[1])
    {
        name = argv[1];
        fout.open(name.c_str(), ios::out | ios::app);
    }
    ostream& sout = name.empty() ? cout : fout;
    return 0;
}
Здесь переменная sout инициализируется в момент объявления результатом работы тернарной операции. Подобного эффекта не удалось бы достичь простым присваиванием в том или ином случае.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6156 / 2885 / 281
Регистрация: 04.12.2011
Сообщений: 7,680
Записей в блоге: 3
05.07.2013, 23:07     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? #84
Цитата Сообщение от ValeryS Посмотреть сообщение
Однако за счёт наличия разницы между инициализацией и присваиванием, бывают ситуации, когда операцию ?: нельзя заменить конструкцией if-then-else, как, например, в следующем случае:
Разве можно всегда оператором заменить выражение? Выражение возвращает значение, а оператор if или switch нет. Когда это значение имеет значение, - нельзя.
И это имеет значение в данном примере. А инициализация, что в списке:
C++
1
2
3
SomeConstuctor(int init_var_)
:const_var(init_method(init_var_)), ...
{}
что в коде:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ostream& foo( string is_empty, ostream& fstr_out){
if( is_empty.empty() ) return cout;
return fstr_out;
}
int main(int argc, char** argv)
{
    string name;
    ofstream fout;
    if (argc > 1 && argv[1])
    {
        name = argv[1];
        fout.open(name.c_str(), ios::out | ios::app);
    }
    ostream& sout = foo(name,  fout);
    return 0;
}
в принципе, действительно может быть без применения тринарного оператора
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
05.07.2013, 23:20     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? #85
IGPIGP,
это все не ко мне это к википедии
я вообще мало пользуюсь им, но иногда без него шибко трудно
например вывести на экран двоичное представление числа
C++
1
2
for(int i=(sizeof(a)-1)*8;i>=0;i--)
 printf("%d",a&(1<<i)?1:0)
без тернарного пришлось бы огород городить
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2013, 00:23     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ?
Еще ссылки по теме:

C++ Тернарный оператор - найти ошибку в коде
Тернарный оператор и множество ошибок в коде C++
C++ Как работает тернарный оператор

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

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6156 / 2885 / 281
Регистрация: 04.12.2011
Сообщений: 7,680
Записей в блоге: 3
06.07.2013, 00:23     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? #86
Цитата Сообщение от ;4811529
это все не ко мне это к википедии
ValeryS, я это и имел ввиду. Сам пользуюсь вики (как и все)) и люблю этот ресурс, но иногда они повторяют предрассудки и даже ошибки. Это нормально для такого большого явления.
А тренарник, удобная штука там где уместно.

Не по теме:

У индейцев Сиу есть легенда. В ней говорится, о тройной стреле которая быстрее молнии... Но подробностей уже не помню. Да и не нужно это у костра молодых воинов.

Yandex
Объявления
06.07.2013, 00:23     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ?
Ответ Создать тему
Опции темы

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