Как мне использовать условный оператор? - PullRequest
30 голосов
/ 25 декабря 2008

Мне всегда было интересно, как написать синтаксис "A ? B : C" на языке, совместимом с C ++.

Я думаю, что это работает примерно так: (псевдокод)

If A > B
   C = A
Else
   C = B

Поможет ли мне какой-нибудь опытный программист на C ++?

Ответы [ 8 ]

57 голосов
/ 25 декабря 2008

Работает так:

(condition) ? true-clause : false-clause

Чаще всего он используется в операциях присваивания, хотя и для других целей. Тернарный оператор ? - это способ сокращения предложения if-else, который также называется оператором немедленного if в других языках (например, IIf(condition,true-clause,false-clause) в VB).

Например:

bool Three = SOME_VALUE;
int x = Three ? 3 : 0;

совпадает с

bool Three = SOME_VALUE;
int x;
if (Three)
    x = 3;
else
    x = 0;
12 голосов
/ 25 декабря 2008

Работает так:

expression ? trueValue : falseValue

Это означает, что если expression оценивается как true, trueValue будет возвращено или выполнено, а falseValue будет возвращено или оценено, если нет.

Помните, что trueValue и falseValue будут оцениваться и выполняться только в том случае, если выражение равно true или false, соответственно. Такое поведение называется коротким замыканием.

4 голосов
/ 25 декабря 2008

В c ++ нет фактической части этого. Это называется троичный оператор. Используется так: <логическое выражение>? <результат, если истина>: <результат, если ложь>; Для вашего примера выше это будет выглядеть так:

C = A > B ? A : B;

Эта статья в Википедии также обсуждает это: http://en.wikipedia.org/wiki/Ternary_operation

2 голосов
/ 25 декабря 2008

Полагаю, вы имеете в виду такие вещи, как a = b? c: d, где b - это условие, c - это значение, когда b равно true, и d - это значение, когда b равно false.

1 голос
/ 18 сентября 2014

Никто, кажется, не упоминает, что результатом выражения условного оператора может быть L-значение в C ++ (но не в C). Следующий код компилируется в C ++ и работает хорошо:

    int a, b;
    bool cond;
    a=1; b=2; cond=true;
    (cond? a : b) = 3;
    cout << a << "," << b << endl;

Приведенная выше программа печатает 3, 2

Тем не менее, если a и b относятся к разным типам, это не сработает. Следующий код выдает ошибку компилятора:

    int a;
    double b;
    bool cond;
    a=1; b=2; cond=true;
    (cond? a : b) = 3;
    cout << a << "," << b << endl;
1 голос
/ 06 мая 2010

Я бы сказал, что? это короткий путь. Тем не менее, некоторые «заядлые» программисты, как правило, говорят, что пишут это долго, поэтому в будущем люди смогут легко читать и изменять код.

Например, если вы напишите

int a = b<c ? b : c;

Некоторые люди утверждают, что проще написать:

if(b<c)
 a = b;
else
 a = c;

Потому что в будущем люди могут его поймать. Конечно, простой б <с? b: c легко поймать, но иногда выполняются сложные операции, и это может быть трудно обнаружить. </p>

0 голосов
/ 03 декабря 2017

просто вы можете написать это как

C = (A> B) A: B;

?

ЭТО ЖЕ, КАК:

if(A>B)

 C=A;

else

 C=B;
0 голосов
/ 23 октября 2017

ЭТО ПРОСТО ПРОСТО Это основной синтаксис: expression1 expression2: expression3;

Если выражение 1 верно, то выражение 2 будет сохраняться, иначе выражение 3 будет сохраняться.

пример:

hey=24>2?24:34;

здесь, поскольку условие истинно, ему будет присвоено значение 24. если он был ложным, то ему будет присвоено 34

...