Dire que j'ai la fonction suivantePourquoi le déplacement en C++ ne construit-il pas de références rvalue par défaut?
void doWork(Widget && param) // param is an LVALUE of RRef type
{
Widget store = std::move(param);
}
Pourquoi ai-je besoin de jeter param
revenir à un rvalue avec std::move()
? Ne devrait-il pas être évident que le type de param
est rvalue puisqu'il a été déclaré dans la signature de la fonction comme une référence rvalue? Le constructeur de déplacement ne devrait-il pas être automatiquement invoqué ici sur ce seul principe?
Pourquoi cela ne se produit-il pas par défaut?
Oh, je vois. Cela a du sens! Je suis d'accord, le design de la copie est toujours plus sûr que le mouvement implicite! – barney
@barney ce moment où un exemple simple vous fait partir "Oh, je vois, ça a du sens!" Content de pouvoir en fournir un. – bolov
Id luttent vraiment pour trouver du vrai code qui fait cela cependant, et encore plus un compilateur ne pourrait pas détecter et traiter comme une erreur. Y a-t-il eu des discussions sur la proposition concernant les compromis relatifs, ou y a-t-il une situation qui est beaucoup plus susceptible de se produire? –