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


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

Dans l'extrait ci-dessus, qu'est-ce que "?"signifie? Que pouvons-nous le remplacer?


53
2018-04-27 21:09


origine


Réponses:


Ceci est communément appelé le opérateur conditionnel, et quand utilisé comme ça:

condition ? result_if_true : result_if_false

... si la condition évalue à true, l'expression évalue à result_if_true, sinon il évalue à result_if_false.

C'est sucre syntactique, 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 à ?: c'est comme "l'opérateur ternaire", car c'est le seul opérateur ternaire (c'est-à-dire qui prend trois arguments) dans le langage utilisé.


92
2018-04-27 21:11



Ceci est un opérateur ternaire, il s'agit essentiellement d'une instruction en ligne si

x ? y : z

fonctionne comme

if(x) y else z

sauf que, au lieu des déclarations, vous avez des expressions; vous pouvez donc 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
2018-04-27 21:12



On l'appelle le opérateur conditionnel.

Vous pouvez le remplacer par:

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

5
2018-04-27 21:10



Vous pouvez simplement le réécrire comme:

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

Ce qui fait la même chose que dit dans les autres réponses.


5
2018-04-27 21:14



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



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 manière la plus propre de le faire, mais j'espère que cela aidera votre compréhension.


2



Juste une note, si jamais vous voyez ceci:

a = x ? : y;

C'est une extension GNU à la norme (voir https://gcc.gnu.org/onlinedocs/gcc/Conditionals.html#Conditionals).

C'est la même chose que

a = x ? x : y;

2