[CPP] Err de compilation... OK mais on l'explique comment ?

Voir le sujet précédent Voir le sujet suivant Aller en bas

resolu [CPP] Err de compilation... OK mais on l'explique comment ?

Message  jonas le Sam 04 Déc 2010, 17:49

bonjour, dans l'exemple suivant, on a une erreur de compilation :

Code:
double & fct1 (double & d)
{
   if(d < 0.)
      return ++d; // OK
   else
      return d++; // !!! ERREUR COMPILATION !!!
}

Pourtant si je dois justifier cette erreur à l'exam de c++, je ne sais pas comment je pourrais l'expliquer.

g++ lui me l'explique comme ça :
Code:
error: invalid initialization of non-const reference of type 'double&' from an rvalue of type 'double'
mais moi ça ne me parle pas ! Car d n'est de toute façon pas une référence vers une variable constante.

A moins que la référence qui est créée comme reour de la fonction ne pointe pas vers la variable référencée par d ?


Dernière édition par jonas le Sam 04 Déc 2010, 20:05, édité 1 fois

jonas

Nombre de messages : 234
Prénom : Jonathan
Statut : Ancien industrialisé
Localisation : Devant son clavier BÉPO !
Date d'inscription : 29/09/2008

http://www.xax.be

Revenir en haut Aller en bas

resolu Re: [CPP] Err de compilation... OK mais on l'explique comment ?

Message  smb le Sam 04 Déc 2010, 19:02

C'est simple pourtant !

soit le code suivant qui provoque une erreur de compilation :
Code:

int x=7;
x++=0;

De la même façon, lorsqu'une fonction retourne une référence non const (la fonction est donc un alias de ce qu'elle retourne), ce qui doit être retourné doit obligatoirement être une lvalue !

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

resolu Re: [CPP] Err de compilation... OK mais on l'explique comment ?

Message  nvs le Sam 04 Déc 2010, 19:06

comme effleuré au cours :

d'une part, avec :
Code:
double d = 4.;
on a que :
Code:
++d
est de type :
Code:
double &
(c'est une lvalue : quelque chose qui peut se trouver à gauche de l'opérateur =),
tandis que :
Code:
d++
est de type :
Code:
double
(c'est une rvalue : quelque chose qui peut se trouver qu'à droite de l'opérateur =)

d'autre part, une valeur temporaire ou immédiate peut être accédée par une référence constante, mais ne peut pas être utilisée par une référence non constante :
Code:
void f(int &){}
void g(const int &){}
int main()
{
    f(5); // ne compile pas
    g(5); // compile
}

la combinaison de ces deux considérations explique l'erreur et le message d'erreur Smile









silent


[edt] encore grillé par stéphan monbaliu Very Happy
[edt] formulation plus correcte (mais peut-être moins claire car double négation) du fait qu'une const & peut référencer une valeur temporaire (ou immédiate)
[edt] 4 -> 4.
[edt] faute de conjugaison


Dernière édition par nvs le Sam 04 Déc 2010, 23:41, édité 5 fois

_________________

nvs

Nombre de messages : 5238
Age : 43
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

resolu Re: [CPP] Err de compilation... OK mais on l'explique comment ?

Message  jonas le Sam 04 Déc 2010, 20:05

merci à vous Smile

jonas

Nombre de messages : 234
Prénom : Jonathan
Statut : Ancien industrialisé
Localisation : Devant son clavier BÉPO !
Date d'inscription : 29/09/2008

http://www.xax.be

Revenir en haut Aller en bas

resolu Re: [CPP] Err de compilation... OK mais on l'explique comment ?

Message  Contenu sponsorisé Aujourd'hui à 21:05


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum