OVH Cloud OVH Cloud

C++0X : Rvalue references

11 réponses
Avatar
Mickaël Wolff
Bonjour la liste,

Je n'arrive pas à saisir le concept des « rvalue references », promis
pour la prochaine normalisation du C++.

À quoi cela correspond-t-il concrètement ? Quelle en est l'utilité
pratique ?

<http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html>

Merci pour vos éclaircissements.
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org

1 réponse

1 2
Avatar
Jean-Marc Bourguet
Mickaël Wolff 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 chainen";
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++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

1 2