std::move - C++ - Programmation
Marsh Posté le 29-04-2009 à 19:20:30
un membre de rvalue ne peut etre qu'une rvalue lui même hein
Marsh Posté le 29-04-2009 à 19:43:54
c'est ce qui me parraissait le plus logique en effet, mais alors pourquoi faire du std::move ici ?
Marsh Posté le 29-04-2009 à 20:21:27
mais le move à la base ça sert à rendre une lvalue rvalue, donc si c déjà une rvalue pourquoi mover??
Marsh Posté le 29-04-2009 à 20:41:02
move preserve la rvalueness d'une rvalue. Qui te dit qu'un de membres là n'a pas lui même un constructeur par move. Si tu passais x.name par lvlaue, il en tomberais pas ou il faut.
Marsh Posté le 29-04-2009 à 20:48:49
sauf que x est forcément une r-value, car on est à cet endroit dans le constructeur de move de x.
Marsh Posté le 30-04-2009 à 00:20:46
oui mais - sauf si on ne se comprend pas- , si on est sûr que x est une r-value, si comme tu me la confirmer "un membre de rvalue ne peut etre qu'une rvalue lui même" et bien je ne vois toujours pas l'intérêt de faire du move par exemple là :
vec(std::move(x.vec)) : x est r-value=> x.vec est r-value, so why move ??
EDIT: à priori l'explication serait que, bien que déclaré comme r-value parameter, x est traité comme l-value pour des raisons de sécurité, si quelqu'un en sait d'avantage je suis preneur
void g(const A& );
void g(A&& );
void f(A&& a)
{
g(a); // calls g(const A& )
}
à priori c'est pour éviter des histoires de double move et donc de contenu "voler" deux fois
Marsh Posté le 14-01-2012 à 19:36:48
de plus il me semble qu'il vaut mieux se contenter dans la pluspart des cas d'un operateur d'assignement par value et qui swap plutot que d'en déclarer un prenant une rvalue reference
Code :
|
Marsh Posté le 26-04-2009 à 15:39:24
Hi,
Dans ce genre de code std::move est utilisé dans le constructeur de move par exemple pour initialiser la variable name, ma question est pourquoi?
Le fait que x soit une rvalue n'implique pas que x.name en soit une ?