Afficher un message
Vieux 26/03/2008, 10h47   #12
Jean-Marc Bourguet
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: C++0X : Rvalue references

Mickaël Wolff <mickael.wolff@laposte.net> writes:

> Mais les références rvalue, ... ben non... je n'arrive pas à voir ce
> que c'est physiquement.


"Physiquement", c'est une reference. La difference est qu'il y a en gros
deux types d'expressions, celles qui peuvent se retrouver a gauche d'une
assignation (lvalue) et celles qui ne peuvent pas (rvalue). Si en C, ca
correspondait assez bien avec "celles qui designent un objet" et "celles
qui designent une valeur", en C++ ce n'est pas le cas or la notion de
reference est fortement liees a la notion de lvalue et on se retrouve sans
pouvoir lier des reference a des rvalues qui designent bien un objet(*).
Les references aux rvalues permettent de le faire avec les effets deja
decrits:
- on peut faire fonctionner certaines choses comme
fstream("/dev/tty") << "Une chaine\n";
qui ne le pouvait pas parce que l'operateur << libre demandait une
reference non constante
- on peut ajouter une notion de deplacement a la notion de copie, et
donc faire des optimisations en recuperant le contenu d'objets
temporaires ou assurer un transfert de responsabilite

A+

(*) On peut lier des references constantes a des lvalues, mais il y a un
objet temporaire qui est alors conceptuellement ajoute -- meme si le
compilateur peut l'enlever en tant qu'optimisation.

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/...ite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
  Réponse avec citation
 
Page generated in 0,06254 seconds with 9 queries