Я хочу использовать тернарный оператор, не говоря уже о C. Как мне это сделать.
(a)? b: nothing;
что-то вроде этого. Что я не использую ни в чем?
Я хочу использовать тернарный оператор, не говоря уже о C. Как мне это сделать.
(a)? b: nothing;
что-то вроде этого. Что я не использую ни в чем?
Если вы используете такой тернарный оператор, предположительно, его можно заменить на:
if (a) { b; }
что намного, намного лучше. (Цель понятна, поэтому код легче читать, и потери производительности не будут.)
Однако, если вы используете тернарный оператор как выражение, т.е.
printf("%d cat%s", number_of_cats, number_of_cats != 1 ? "s" : <nothing>);
a = b*c + (d == 0 ? 1 : <nothing>);
то значение <nothing>
зависит от контекста, в котором он используется. В моем первом примере <nothing>
должен быть ""
, а во втором - 0
.
Недопустимое неверное выражение. Попробуйте изменить условие вместо этого.
(!a) ?: b;
if-else
является конструкцией потока управления, где ?:
является оператором, а x ? y : z
- выражением - выражение не может иметь "никакого значения", а поток управления может иметь "путь" ничего не делать ". Нет реальной эквивалентности между if-else и?: - они не являются взаимозаменяемыми при любых обстоятельствах.
Вы можете добиться желаемого эффекта в некоторых обстоятельствах, но, вероятно, менее эффективно использовать if
без else
. Например, эффект:
if( x )
{
y = z ;
}
может быть достигнуто:
y = x ? z : y ;
но существует эффективное, но избыточное присваивание else y = y
, когда x является ложным, который ваш компилятор может оптимизировать или оптимизировать. Таким образом, вы можете добиться эффекта, но только если вы знаете, что "текущее значение" возвращается как результат выражения ?:
.
Вы не можете опустить часть else
. Просто используйте выражение none.
Но в этом случае часто лучше использовать if
...
Похоже, что этот вопрос существует некоторое время, но FWIW короткая программа на языке C, скомпилированная с GCC 4.6.3, показала следующее:
a = a ? b:;
. msgstr "ошибка: ожидаемое выражение до '; токен".a = a ?: b;
и a = a ? a : b;
Возможно, кто-то может добавить дополнительные детали компилятора, но мне кажется, что исключение пути выполнения true
просто фантастично.
Я сделал это
isLeapYear(i) ? cout<< i<<endl: cout<<"" ;
Не уверен, хотя, если есть какое-то влияние на производительность.
Я попытался разместить там целые числа, и он работает хорошо. Например, если вы хотите вернуть "а", если он оценил значение "Истина", вы можете записать его так:
true ? a : 1;
( i == 1 ) ? puts("One") : 1 ;
If i equals 1 prints One else do nothing.
OR
( i == 1 ) ? i=2 : 0 ;
printf(" %d " , i );
Попробуйте это
BOOL bIsOK = (a == 5)?TRUE:FALSE;