web-dev-qa-db-fra.com

Comment utiliser l'opérateur conditionnel?

Je me suis toujours demandé comment écrire la syntaxe"A ? B : C"dans un langage compatible C++.

Je pense que cela fonctionne quelque chose comme: (pseudo code)

If A > B
   C = A
Else
   C = B

Est-ce qu'un ancien programmeur C++, s'il vous plaît, m'aide?

30
Robinicks

Cela fonctionne comme ceci:

(condition) ? true-clause : false-clause

Il est le plus souvent utilisé dans les opérations d'affectation, bien qu'il ait également d'autres utilisations. L'opérateur ternaire ? permet de raccourcir une clause if-else. Il est également appelé une instruction if immédiate dans d'autres langues (IIf(condition,true-clause,false-clause) en VB, par exemple).

Par exemple:

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

est le même que

bool Three = SOME_VALUE;
int x;
if (Three)
    x = 3;
else
    x = 0;
56
lc.

Cela fonctionne comme ceci:

expression ? trueValue : falseValue

Ce qui signifie fondamentalement que si expression est évalué à true, trueValue sera renvoyé ou exécuté, et falseValue sera renvoyé ou évalué sinon.

N'oubliez pas que trueValue et falseValue ne seront évaluées et exécutées que si l'expression est vraie ou fausse, respectivement. Ce comportement s'appelle court-circuiter.

12
magcius

En c ++, il n'y a pas de réel si cela fait partie. C'est ce qu'on appelle l'opérateur ternaire. Il est utilisé comme ceci: <déclaration booléenne>? <résultat si vrai>: <résultat si faux>; Pour votre exemple ci-dessus, cela ressemblerait à ceci:

C = A > B ? A : B;

Cet article sur wikipedia en parle également: http://en.wikipedia.org/wiki/Ternary_operation

4
Mykroft

Je suppose que vous voulez dire des choses comme a = b? c: d, où b est la condition, c est la valeur lorsque b est vrai et d est la valeur lorsque b est faux.

2
edef

Personne ne semble mentionner que le résultat d'une expression d'opérateur conditionnel peut être une valeur L en C++ (mais pas en C). Le code suivant est compilé en C++ et fonctionne bien:

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

Le programme ci-dessus imprime 3, 2

Pourtant, si a et b sont de types différents, cela ne fonctionnera pas. Le code suivant donne une erreur de compilation:

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

Je dirais le? est un raccourci. Cependant, certains programmeurs "durs" ont tendance à dire d'écrire le long chemin afin que, dans les cas futurs, les gens puissent facilement lire et modifier le code.

Par exemple, si vous écrivez

int a = b<c ? b : c;

Certaines personnes affirment qu'il est plus clair d'écrire:

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

Parce que dans les cas futurs, les gens peuvent l'attraper. Bien sûr, un simple b <c? b: c est facile à saisir, mais des opérations complexes sont parfois effectuées et il peut être difficile à repérer.

1
Daniel

IT IS QUITE SIMPLE C'EST LA SYNTAXE BASIQUE IS: Expression1? Expression2: expression3;

Si l'expression 1 est vraie, alors l'expression 2 sera valide, sinon l'expression 3 sera valide.

exemple:

hey=24>2?24:34;

ici comme condition est vraie, la valeur 24 lui sera assignée. Si elle était fausse, alors 34 lui seront assignés 

0
HARSH BAJPAI

simplement vous pouvez écrire ceci comme

C = (A> B)? A: B;

This IS MÊME QUE:

if(A>B)

 C=A;

else

 C=B;
0
Ravi Kumar Yadav