evaluation avec "? "...un vestige de C ? ex: b1 ? "..." : "...."
Le
heinquoi
bjr,
j'ai dans un exemple un programme qui contient la ligne :
cout << endl << "le nombre 11 etait " << (b2 ? "TROUVE" : "NON TROUVE") <<
endl;
je intéresse surtout à (b2 ? "TROUVE" : "NON TROUVE")
est ce que opérateur évaluation "?" est un vestige de C ?
si je remplace ce morceau par
( if b2 "TROUVE" else "NON TROUVE") cela ne fonctionne pas, pourtant il
s'agit d'evaluation sur b2
hormis le fait que cette écriture lorsqu'elle est fréquente est obscure et
limite 'incantatoire' qu'elle est sont intérêt et pourquoi fonctionne t elle
ou un if ne fonctionne pas?
--
Cordialement,
Heinquoi
j'ai dans un exemple un programme qui contient la ligne :
cout << endl << "le nombre 11 etait " << (b2 ? "TROUVE" : "NON TROUVE") <<
endl;
je intéresse surtout à (b2 ? "TROUVE" : "NON TROUVE")
est ce que opérateur évaluation "?" est un vestige de C ?
si je remplace ce morceau par
( if b2 "TROUVE" else "NON TROUVE") cela ne fonctionne pas, pourtant il
s'agit d'evaluation sur b2
hormis le fait que cette écriture lorsqu'elle est fréquente est obscure et
limite 'incantatoire' qu'elle est sont intérêt et pourquoi fonctionne t elle
ou un if ne fonctionne pas?
--
Cordialement,
Heinquoi

Poser une question


C++ par compatibilité.
La sémantique est :
test ? <expression_si_vrai> : <expression_si_faux>
cout<<"TROUVE";
else
cout<<"NON TROUVE";
gens (et les cas!) soit alourdit soit rend plus clair le code.
La différence sémantique avec un if est que l'expression ( ... ? ... : ...)
"renvoie" (le terme exact est "est évaluée comme") une valeur de type const
char* qui peut ête envoyé directement dans le flux. Par contre, l'expression
if ne "renvoie" rien en elle même.
Ton exemple est un cas ou je trouve, personnellement, que l'écriture "... ?
... : ..." est plus claire, mais c'est hautement discutable.
Arnaud
( if b2 "TROUVE" else "NON TROUVE") ne peut fonctionner car, d'une part, il
manque des parenthèses autour de b2, mais surtout, "TROUVE" et "NON TROUVE"
ne sont pas des *instructions* mais des *expressions* que le "?" renvoie ou
non selon le réultat du test...
L'opérateur "?" est peut être parfois dur à lire, quand les opérandes sont
longs par exemple... Mais pour ma part, c'est une écriture que j'aime
particulièrement et que je n'ai jamais eu de mal à lire. On le retouve
d'ailleurs dans d'autres langages (Prolog, notamment).
Quant à savoir si c'est un vestige du C ou si c'est du C++ pur jus, je
laisse les spécialistes de ce NG se prononcer !
|> j'ai dans un exemple un programme qui contient la ligne :
|> cout << endl << "le nombre 11 etait " << (b2 ? "TROUVE" : "NON TROUVE") <<
|> endl;
|> je intéresse surtout à (b2 ? "TROUVE" : "NON TROUVE")
|> est ce que opérateur évaluation "?" est un vestige de C ?
Dans le même sens que l'opérateur de '+' est un vestige de C ?
|> si je remplace ce morceau par
|> ( if b2 "TROUVE" else "NON TROUVE") cela ne fonctionne pas, pourtant il
|> s'agit d'evaluation sur b2
|> hormis le fait que cette écriture lorsqu'elle est fréquente est
|> obscure et limite 'incantatoire' qu'elle est sont intérêt et
|> pourquoi fonctionne t elle ou un if ne fonctionne pas?
Parce qu'un if, c'est une instruction de contrôle de flux, et ?:, c'est
un opérateur. On aurait pu imaginer qu'le même syntaxe sert dans les
deux cas, mais ce n'est pas le cas en C ni en C++ (ni en Java, ni en
Objective C, ni en ...).
Je ne sais pas en ce qui concerne les autres, mais je m'en sers assez
librement. Si l'idée importante derrière un bout de code, c'est que la
valeur x soit affectée, et non qu'on a une condition, je le trouve plus
claire d'écrire :
x = ( condition
? a
: b ) ;
que :
if ( condition ) {
x = a ;
} else {
x = b ;
}
--
James Kanze
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
d'apres ton posts j'ai cru comprendre que ?: contrairement à if else avait
une valeur de retour "est évaluée comme".
ce qui pourrait faire
<type_expression> test ? <expression_si_vrai> : <expression_si_faux>
^^^^^^^^^^^^^^
valeur de 'retour'
Cela semble impliquer que <expression_si_vrai> et <expression_si_faux> soit
de meme type. Est ce tjrs le cas ?
ex: cout cout
Le type renvoyé est -il tjrs char* ( cf question precedente) ?
d'accord avec toi, lorsque l'on en connaît le sens.
--
Cordialement,
Heinquoi
Le type renvoyé est le type de <expression_si_faux> doit être du même type qui <expression_si_vrai> (ou au
moins castable par le compilo)
Dans ton exemple, le résultat est "cout si faux
Nico