Что значит '?' делать в C ++? - PullRequest
64 голосов
/ 28 апреля 2009
int qempty()
{
    return (f == r ? 1 : 0);
}

Что означает "? " в приведенном выше фрагменте? Чем мы можем заменить его?

Ответы [ 7 ]

109 голосов
/ 28 апреля 2009

Обычно его называют условным оператором , а при использовании так:

condition ? result_if_true : result_if_false

... если значение condition равно true, выражение равно result_if_true, в противном случае оно равно result_if_false.

Это синтаксический сахар , и в этом случае его можно заменить на

int qempty()
{ 
  if(f == r)
  {
      return 1;
  } 
  else 
  {
      return 0;
  }
}

Примечание: Некоторые люди называют ?: это как " троичный оператор ", потому что это единственный троичный оператор (т.е. оператор, который принимает три аргумента) в языке они используют.

14 голосов
/ 28 апреля 2009

Это троичный оператор, это в основном встроенный оператор if

x ? y : z

работает как

if(x) y else z

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

Это полезно для написания сжатого кода, но может быть использовано слишком много для создания сложного кода.

6 голосов
/ 28 апреля 2009

Вы можете просто переписать его как:

int qempty(){ return(f==r);}

Что делает то же самое, что сказано в других ответах.

5 голосов
/ 28 апреля 2009

Он называется условным оператором .

Вы можете заменить его на:

int qempty(){ 
    if (f == r) return 1;
    else return 0;
}
3 голосов
/ 22 ноября 2015

Просто примечание, если вы когда-либо увидите это:

a = x ? : y;

Это расширение стандарта GNU (см. https://gcc.gnu.org/onlinedocs/gcc/Conditionals.html#Conditionals).

Это так же, как

a = x ? x : y;
3 голосов
/ 28 апреля 2009

Это условный оператор.

а? б: с

Это сокращение для IF / THEN / ELSE.

означает: если a истинно, вернуть b, иначе вернуть c. В этом случае, если f == r, вернуть 1, иначе вернуть 0.

2 голосов
/ 28 апреля 2009

Знак вопроса является условным оператором. Код означает, что если f == r, то возвращается 1, в противном случае возвращается 0. Код может быть переписан как

int qempty()
{
  if(f==r)
    return 1;
  else
    return 0;
}

, что, вероятно, не самый чистый способ сделать это, но, надеюсь, поможет вашему пониманию.

...