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
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 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
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