Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > как записать тернарное выражение для одного резуль


Автор: andrew_121 25.2.2010, 18:03
вот в чем вопрос.
каким образом можно записать тернарное выражение для единственного результата?
поясню:
Код

результат = (если истина) ? (возвращаем это) : (иначе это)

/** а нужно что-то типа */
результат = (если истина) ? (возвращаем это)

такое возможно без функций-заглушек?

Автор: InvalidProperty 25.2.2010, 18:11
а зачем??? чем не подходит
Код

if(если истина) {выполняем это}

Автор: andrew_121 25.2.2010, 18:16
InvalidProperty, запутался.
я имел ввиду другое. отредактировал первый пост.

Автор: GoldFinch 25.2.2010, 18:24
x = cond ? y : x ;

Автор: andrew_121 25.2.2010, 18:30
Цитата(GoldFinch @  25.2.2010,  18:24 Найти цитируемый пост)
x = cond ? y : x ; 

 smile 

в моем случае, "возвращаем это"(Х) - это результат некой функции.

Автор: GoldFinch 25.2.2010, 22:35
x = cond ? foo(y) : x ; 

Автор: InvalidProperty 26.2.2010, 10:20
и все-таки... до сих пор не могу понять, а чем же вариант
Код

if(something) my_something = another_something

не устраивает?

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

Автор: xvr 26.2.2010, 15:06
Цитата(andrew_121 @ 25.2.2010,  18:03)
вот в чем вопрос.
каким образом можно записать тернарное выражение для единственного результата?
поясню:
Код

результат = (если истина) ? (возвращаем это) : (иначе это)

/** а нужно что-то типа */
результат = (если истина) ? (возвращаем это)


И что же должно попасть в результат если не истина?

Автор: andrew_121 26.2.2010, 17:13
всем спасибо.
вопрос возник чисто из теоретического любопытства.

Автор: mes 26.2.2010, 17:50
Цитата(andrew_121 @  26.2.2010,  16:13 Найти цитируемый пост)
вопрос возник чисто из теоретического любопытства.

а наше любопытство не изволите утолить ?

Цитата(xvr @  26.2.2010,  14:06 Найти цитируемый пост)
И что же должно попасть в результат если не истина?


P.S. или это любопытство возникло в следствии столкновения с шарповым  оператором_??   ? 

Автор: andrew_121 26.2.2010, 18:29
Цитата(mes @  26.2.2010,  17:50 Найти цитируемый пост)
или это любопытство возникло в следствии столкновения с шарповым  оператором_??   ?

я не знаком с шарпом.


Цитата(mes @  26.2.2010,  17:50 Найти цитируемый пост)
а наше любопытство не изволите утолить ?

в общем есть массив булевых значений - 42 значения.
в зависимости от состояния флага, нужно выполнить определенную функцию(функций меньше, повторяются).
писать 42 if() {} не хотелось, т.к. мне показалось с помощью тернарных выражений запись получится более понятной.
сделал так:
Код

static void null_function() {}
...
(expr) ? really_function() : null_function();


всем спасибо.

Автор: xvr 26.2.2010, 19:14
Цитата(andrew_121 @ 26.2.2010,  18:29)
в общем есть массив булевых значений - 42 значения.
в зависимости от состояния флага, нужно выполнить определенную функцию(функций меньше, повторяются).

Ясно
Цитата

писать 42 if() {} не хотелось, т.к. мне показалось с помощью тернарных выражений запись получится более понятной.
Скорее наоборот. 42 if'а будут понятнее
Цитата

сделал так:
Можно покороче
Код

(expr) ? really_function() : 0;
really_function должна возвращать int, либо так
Код

(expr) ? really_function() : (void)0;
если really_function возвращает void

Но в любом случае это изврат - 
Код

if (expr) really_function();
смотрится и естественнее и короче.


Автор: mes 26.2.2010, 21:32
Цитата(andrew_121 @  26.2.2010,  17:29 Найти цитируемый пост)
в общем есть массив- 42 значения.

Цитата(andrew_121 @  26.2.2010,  17:29 Найти цитируемый пост)
писать 42 if() {} не хотелось,

чем цикл то не устроил ? 
если из за того что для каждого значения своя функция, то что мешает отразить их на память ?
если вдруг не массив а нечто другое, то тоже есть решения..но для совета надо представлять Вашу задачу ясней smile

в общем такое ощущение, что ищете выход пытаясь пролезть в форточку, и забыли посмотреть, что дверь нараспашку.



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)