evaluation avec "? "...un vestige de C ? ex: b1 ? "..." : "...."
23 réponses
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
|> >Dans ces cas-là, on n'a de toute façon pas le choix.
|> : MaBase (std::max (param1, param2))
Certes. Je prenais un exemple simple.
En général, on pourrait toujours créer une fonction pour déterminer la valeur.
-- 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
Fabien LE LEZ <gramster@gramster.com> writes:
|> On 25 Jun 2004 04:46:48 -0700, kanze@gabi-soft.fr:
|> >Dans ces cas-là, on n'a de toute façon pas le choix.
|> : MaBase (std::max (param1, param2))
Certes. Je prenais un exemple simple.
En général, on pourrait toujours créer une fonction pour déterminer la
valeur.
--
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
|> >Dans ces cas-là, on n'a de toute façon pas le choix.
|> : MaBase (std::max (param1, param2))
Certes. Je prenais un exemple simple.
En général, on pourrait toujours créer une fonction pour déterminer la valeur.
-- 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
Loïc Joly
wrote:
Il y a un cas dont l'absense me frustre de temps en temps : si les types des deux expressions sont des pointeurs à des classes, et les deux classes ont une classe de base en commun, ça ne marche pas. Donc, des choses comme :
Base* pb = condition ? new Derived1 : new Derived2 ;
ne marche pas ; il faut explicitement convertir au moins un des expressions en type Base*. L'une ou l'autre (ou les deux), ça ne fait rien.
Tu sias pour quelle raison ? Est-ce simplement un oubli, ou y avait-il une difficulté ?
-- Loïc
kanze@gabi-soft.fr wrote:
Il y a un cas dont l'absense me frustre de temps en temps : si les types
des deux expressions sont des pointeurs à des classes, et les deux
classes ont une classe de base en commun, ça ne marche pas. Donc, des
choses comme :
Base* pb = condition ? new Derived1 : new Derived2 ;
ne marche pas ; il faut explicitement convertir au moins un des
expressions en type Base*. L'une ou l'autre (ou les deux), ça ne fait
rien.
Tu sias pour quelle raison ? Est-ce simplement un oubli, ou y avait-il
une difficulté ?
Il y a un cas dont l'absense me frustre de temps en temps : si les types des deux expressions sont des pointeurs à des classes, et les deux classes ont une classe de base en commun, ça ne marche pas. Donc, des choses comme :
Base* pb = condition ? new Derived1 : new Derived2 ;
ne marche pas ; il faut explicitement convertir au moins un des expressions en type Base*. L'une ou l'autre (ou les deux), ça ne fait rien.
Tu sias pour quelle raison ? Est-ce simplement un oubli, ou y avait-il une difficulté ?
-- Loïc
James Kanze
Loïc Joly writes:
|> wrote:
|> > Il y a un cas dont l'absense me frustre de temps en temps : si les |> > types des deux expressions sont des pointeurs à des classes, et |> > les deux classes ont une classe de base en commun, ça ne marche |> > pas. Donc, des choses comme : |> > Base* pb = condition ? new Derived1 : new Derived2 ; |> > ne marche pas ; il faut explicitement convertir au moins un des |> > expressions en type Base*. L'une ou l'autre (ou les deux), ça ne |> > fait rien.
|> Tu sias pour quelle raison ? Est-ce simplement un oubli, ou y |> avait-il une difficulté ?
Je n'ai pas participé aux discussions sur ce point, mais a priori, je crois que dans certains cas, par exemple s'il y a de mutliples bases virtuelles, ce n'est pas évident quel type prendre.
-- 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
Loïc Joly <loic.actarus.joly@wanadoo.fr> writes:
|> kanze@gabi-soft.fr wrote:
|> > Il y a un cas dont l'absense me frustre de temps en temps : si les
|> > types des deux expressions sont des pointeurs à des classes, et
|> > les deux classes ont une classe de base en commun, ça ne marche
|> > pas. Donc, des choses comme :
|> > Base* pb = condition ? new Derived1 : new Derived2 ;
|> > ne marche pas ; il faut explicitement convertir au moins un des
|> > expressions en type Base*. L'une ou l'autre (ou les deux), ça ne
|> > fait rien.
|> Tu sias pour quelle raison ? Est-ce simplement un oubli, ou y
|> avait-il une difficulté ?
Je n'ai pas participé aux discussions sur ce point, mais a priori, je
crois que dans certains cas, par exemple s'il y a de mutliples bases
virtuelles, ce n'est pas évident quel type prendre.
--
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
|> > Il y a un cas dont l'absense me frustre de temps en temps : si les |> > types des deux expressions sont des pointeurs à des classes, et |> > les deux classes ont une classe de base en commun, ça ne marche |> > pas. Donc, des choses comme : |> > Base* pb = condition ? new Derived1 : new Derived2 ; |> > ne marche pas ; il faut explicitement convertir au moins un des |> > expressions en type Base*. L'une ou l'autre (ou les deux), ça ne |> > fait rien.
|> Tu sias pour quelle raison ? Est-ce simplement un oubli, ou y |> avait-il une difficulté ?
Je n'ai pas participé aux discussions sur ce point, mais a priori, je crois que dans certains cas, par exemple s'il y a de mutliples bases virtuelles, ce n'est pas évident quel type prendre.
-- 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