web-dev-qa-db-fra.com

Qu'est-ce que '?' faire en C ++?

int qempty()
{
    return (f == r ? 1 : 0);
}

Dans l'extrait ci-dessus, que signifie "?"? Avec quoi pouvons-nous le remplacer?

64
Thaier Alkhateeb

Ceci est communément appelé l'opérateur conditionnel , et lorsqu'il est utilisé comme ceci:

condition ? result_if_true : result_if_false

... si condition est évalué à true, l'expression est évaluée à result_if_true, sinon il est évalué à result_if_false.

C'est sucre syntaxique , et dans ce cas, il peut être remplacé par

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

Remarque: Certaines personnes se réfèrent à ?: it comme " l'opérateur ternaire ", car il s'agit du seul opérateur ternaire (c'est-à-dire qui prend trois arguments) dans la langue qu'il utilise.

112
Daniel LeCheminant

Ceci est un opérateur ternaire, il s’agit essentiellement d’une déclaration inline si

x ? y : z

fonctionne comme

if(x) y else z

sauf que, au lieu de déclarations, vous avez des expressions; afin que vous puissiez l'utiliser au milieu d'une déclaration plus complexe.

C'est utile pour écrire du code succinct, mais on peut en abuser pour créer du code difficile à gérer.

14
Richard

C'est ce qu'on appelle opérateur conditionnel .

Vous pouvez le remplacer par:

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

C'est l'opérateur conditionnel.

une ? avant JC

C'est un raccourci pour IF/THEN/ELSE.

signifie: si a est vrai, retourne b, sinon retourne c. Dans ce cas, si f == r, retourne 1, sinon retourne 0.

3
Joe

Juste une note, si jamais vous voyez ceci:

a = x ? : y;

Il s’agit d’une extension GNU à la norme (voir https://gcc.gnu.org/onlinedocs/gcc/Conditionals.html#Conditionals) ).

C'est pareil que

a = x ? x : y;
3
Nick Kossifidis

Le point d'interrogation est l'opérateur conditionnel. Le code signifie que si f == r alors 1 est retourné, sinon, retourne 0. Le code pourrait être réécrit comme

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

ce qui n'est probablement pas la façon la plus propre de le faire, mais cela aide, espérons-le, à votre compréhension.

2
ssakl