Je me serait attendu dans le troisième cas à ce que l'expression me
retourne une valeur de type A, or la norme semble dire que ce cas n'est
pas couvert. Quelqu'un en connait la motivation ?
Merci,
Je me serait attendu dans le troisième cas à ce que l'expression me
retourne une valeur de type A, or la norme semble dire que ce cas n'est
pas couvert. Quelqu'un en connait la motivation ?
Merci,
Je me serait attendu dans le troisième cas à ce que l'expression me
retourne une valeur de type A, or la norme semble dire que ce cas n'est
pas couvert. Quelqu'un en connait la motivation ?
Merci,
test ? a : b; // Ok
test ? b : a; // Ok
test ? b : c; // Pas ok
}
Je me serait attendu dans le troisième cas à ce que l'expression me
retourne une valeur de type A,
test ? a : b; // Ok
test ? b : a; // Ok
test ? b : c; // Pas ok
}
Je me serait attendu dans le troisième cas à ce que l'expression me
retourne une valeur de type A,
test ? a : b; // Ok
test ? b : a; // Ok
test ? b : c; // Pas ok
}
Je me serait attendu dans le troisième cas à ce que l'expression me
retourne une valeur de type A,
Il doit manquer quelque chose dans ta question
Il doit manquer quelque chose dans ta question
Il doit manquer quelque chose dans ta question
On Wed, 03 May 2006 21:43:35 +0200, Hamiral :Il doit manquer quelque chose dans ta question
Le code est effectivement erroné, mais la question est claire : Loïc
s'attendait à ce que b et c dans "test ? b : c;" soient convertis en
des objets de type A pour satisfaire aux conditions d'utilisation de
l'opérateur ternaire.
On Wed, 03 May 2006 21:43:35 +0200, Hamiral <hamiral@hamham.fr>:
Il doit manquer quelque chose dans ta question
Le code est effectivement erroné, mais la question est claire : Loïc
s'attendait à ce que b et c dans "test ? b : c;" soient convertis en
des objets de type A pour satisfaire aux conditions d'utilisation de
l'opérateur ternaire.
On Wed, 03 May 2006 21:43:35 +0200, Hamiral :Il doit manquer quelque chose dans ta question
Le code est effectivement erroné, mais la question est claire : Loïc
s'attendait à ce que b et c dans "test ? b : c;" soient convertis en
des objets de type A pour satisfaire aux conditions d'utilisation de
l'opérateur ternaire.
Bon, alors là je vais sérieusement avoir besoin de clarifications, car je
n'y comprends rien de rien ...
Bon, alors là je vais sérieusement avoir besoin de clarifications, car je
n'y comprends rien de rien ...
Bon, alors là je vais sérieusement avoir besoin de clarifications, car je
n'y comprends rien de rien ...
Dans le code suivant :
struct A {};
struct B : A{};
struct C : A{};
A a;
B b;
C c;
bool test;
int f()
{
test ? a : b; // Ok
test ? b : a; // Ok
test ? b : c; // Pas ok
}
Je me serait attendu dans le troisième cas à ce que
l'expression me retourne une valeur de type A, or la norme
semble dire que ce cas n'est pas couvert. Quelqu'un en connait
la motivation ?
Dans le code suivant :
struct A {};
struct B : A{};
struct C : A{};
A a;
B b;
C c;
bool test;
int f()
{
test ? a : b; // Ok
test ? b : a; // Ok
test ? b : c; // Pas ok
}
Je me serait attendu dans le troisième cas à ce que
l'expression me retourne une valeur de type A, or la norme
semble dire que ce cas n'est pas couvert. Quelqu'un en connait
la motivation ?
Dans le code suivant :
struct A {};
struct B : A{};
struct C : A{};
A a;
B b;
C c;
bool test;
int f()
{
test ? a : b; // Ok
test ? b : a; // Ok
test ? b : c; // Pas ok
}
Je me serait attendu dans le troisième cas à ce que
l'expression me retourne une valeur de type A, or la norme
semble dire que ce cas n'est pas couvert. Quelqu'un en connait
la motivation ?
Bonjour,
Dans le code suivant :
struct A {};
struct B : A{};
struct C : A{};
A a;
B b;
C c;
bool test;
int f()
{
test ? a : b; // Ok
test ? b : a; // Ok
test ? b : c; // Pas ok
}
Je me serait attendu dans le troisième cas à ce que l'expression me
retourne une valeur de type A, or la norme semble dire que ce cas n'est
pas couvert. Quelqu'un en connait la motivation ?
Bonjour,
Dans le code suivant :
struct A {};
struct B : A{};
struct C : A{};
A a;
B b;
C c;
bool test;
int f()
{
test ? a : b; // Ok
test ? b : a; // Ok
test ? b : c; // Pas ok
}
Je me serait attendu dans le troisième cas à ce que l'expression me
retourne une valeur de type A, or la norme semble dire que ce cas n'est
pas couvert. Quelqu'un en connait la motivation ?
Bonjour,
Dans le code suivant :
struct A {};
struct B : A{};
struct C : A{};
A a;
B b;
C c;
bool test;
int f()
{
test ? a : b; // Ok
test ? b : a; // Ok
test ? b : c; // Pas ok
}
Je me serait attendu dans le troisième cas à ce que l'expression me
retourne une valeur de type A, or la norme semble dire que ce cas n'est
pas couvert. Quelqu'un en connait la motivation ?
On Wed, 03 May 2006 22:45:26 +0200, Hamiral :
Bon, alors là je vais sérieusement avoir besoin de
clarifications, car je n'y comprends rien de rien ...
L'opérateur ternaire prend trois arguments, le premier étant
un booléen.
Dans l'expression
resultat = test ? a : b;
Si "test" vaut true, "a" est assigné à "resultat".
Sinon, "b" est assigné à "resultat".
Si a et b sont de même type, tout va bien.
Sinon (par exemple, a est un double, et b est un int), il y a un
problème : de quel type est l'expression "test ? a : b" ?
Il y a donc une règle qui dit que les deux derniers arguments
de l'opérateur ?: doivent être de même type.
On Wed, 03 May 2006 22:45:26 +0200, Hamiral <hamiral@hamham.fr>:
Bon, alors là je vais sérieusement avoir besoin de
clarifications, car je n'y comprends rien de rien ...
L'opérateur ternaire prend trois arguments, le premier étant
un booléen.
Dans l'expression
resultat = test ? a : b;
Si "test" vaut true, "a" est assigné à "resultat".
Sinon, "b" est assigné à "resultat".
Si a et b sont de même type, tout va bien.
Sinon (par exemple, a est un double, et b est un int), il y a un
problème : de quel type est l'expression "test ? a : b" ?
Il y a donc une règle qui dit que les deux derniers arguments
de l'opérateur ?: doivent être de même type.
On Wed, 03 May 2006 22:45:26 +0200, Hamiral :
Bon, alors là je vais sérieusement avoir besoin de
clarifications, car je n'y comprends rien de rien ...
L'opérateur ternaire prend trois arguments, le premier étant
un booléen.
Dans l'expression
resultat = test ? a : b;
Si "test" vaut true, "a" est assigné à "resultat".
Sinon, "b" est assigné à "resultat".
Si a et b sont de même type, tout va bien.
Sinon (par exemple, a est un double, et b est un int), il y a un
problème : de quel type est l'expression "test ? a : b" ?
Il y a donc une règle qui dit que les deux derniers arguments
de l'opérateur ?: doivent être de même type.
On 3 May 2006 09:37:27 -0700, "Loïc Joly"
:
test ? a : b; // Ok
test ? b : a; // Ok
Tiens ? Je me serais attendu à ce que ces deux-là renvoient
une erreur.
Mais bon, dans les deux cas, un opérande peut être converti en
le type de l'autre opérande (attention : il s'agit alors
vraisemblablement d'une R-value), donc on peut comprendre que
ça marche.
test ? b : c; // Pas ok
}
Je me serait attendu dans le troisième cas à ce que
l'expression me retourne une valeur de type A,
Pourquoi donc ?
À ma connaissance, un tel principe de "réduction au facteur commun"
n'existe pas en C++.
Le fonctionnement de l'opérateur ?: impose que les deux
opérandes soient de même type.
S'il est possible de convertir un des opérateurs dans le type
de l'autre, tout va bien. Sinon, le compilateur ne s'amuse pas
à essayer de deviner quel type utiliser. Heureusement,
d'ailleurs, sinon bonjour les surprises...
D'une manière générale, mieux vaut expliciter les conversions
autant que possible -- ne serait-ce que pour s'assurer qu'on a
bien compris ce qui se passe.
test ? a : b;
test ? A(b) : a;
test ? A(b) : A(c);
On 3 May 2006 09:37:27 -0700, "Loïc Joly"
<loic.actarus.joly@wanadoo.fr>:
test ? a : b; // Ok
test ? b : a; // Ok
Tiens ? Je me serais attendu à ce que ces deux-là renvoient
une erreur.
Mais bon, dans les deux cas, un opérande peut être converti en
le type de l'autre opérande (attention : il s'agit alors
vraisemblablement d'une R-value), donc on peut comprendre que
ça marche.
test ? b : c; // Pas ok
}
Je me serait attendu dans le troisième cas à ce que
l'expression me retourne une valeur de type A,
Pourquoi donc ?
À ma connaissance, un tel principe de "réduction au facteur commun"
n'existe pas en C++.
Le fonctionnement de l'opérateur ?: impose que les deux
opérandes soient de même type.
S'il est possible de convertir un des opérateurs dans le type
de l'autre, tout va bien. Sinon, le compilateur ne s'amuse pas
à essayer de deviner quel type utiliser. Heureusement,
d'ailleurs, sinon bonjour les surprises...
D'une manière générale, mieux vaut expliciter les conversions
autant que possible -- ne serait-ce que pour s'assurer qu'on a
bien compris ce qui se passe.
test ? a : b;
test ? A(b) : a;
test ? A(b) : A(c);
On 3 May 2006 09:37:27 -0700, "Loïc Joly"
:
test ? a : b; // Ok
test ? b : a; // Ok
Tiens ? Je me serais attendu à ce que ces deux-là renvoient
une erreur.
Mais bon, dans les deux cas, un opérande peut être converti en
le type de l'autre opérande (attention : il s'agit alors
vraisemblablement d'une R-value), donc on peut comprendre que
ça marche.
test ? b : c; // Pas ok
}
Je me serait attendu dans le troisième cas à ce que
l'expression me retourne une valeur de type A,
Pourquoi donc ?
À ma connaissance, un tel principe de "réduction au facteur commun"
n'existe pas en C++.
Le fonctionnement de l'opérateur ?: impose que les deux
opérandes soient de même type.
S'il est possible de convertir un des opérateurs dans le type
de l'autre, tout va bien. Sinon, le compilateur ne s'amuse pas
à essayer de deviner quel type utiliser. Heureusement,
d'ailleurs, sinon bonjour les surprises...
D'une manière générale, mieux vaut expliciter les conversions
autant que possible -- ne serait-ce que pour s'assurer qu'on a
bien compris ce qui se passe.
test ? a : b;
test ? A(b) : a;
test ? A(b) : A(c);