Supposons que j'aie le code suivant :
int main()
{
std::vector<std::string> strs;
std::string var("Hello World");
// Make some modifications to 'var'
strs.push_back(std::move(var));
}
La partie de l'échantillon que je souhaite souligner est l'utilisation de std::move()
. Je m'inquiète essentiellement de l'existence d'une copie sur le site de la push_back()
appel. Supposons que la chaîne que j'ajoute soit très grande. Je suis encore en train d'apprendre les références aux valeurs r de C++11, donc je ne suis pas sûr de la façon dont le compilateur optimiserait la copie (s'il le fait) sans l'option std::move()
.
Quelqu'un peut-il expliquer s'il s'agit d'une optimisation prématurée (forcer les déplacements dans tous les cas où l'on veut éviter les copies, en général) ? Si c'est le cas, quels sont les modèles que le compilateur devrait suivre (ou qu'il est le plus probable qu'il suive) et qui résulteraient en un déplacement optimisé et automatique ici ?
EDITAR
Je tiens à ajouter que je comprends comment les mouvements automatiques se produisent sur le marché de l'emploi. valeurs de retour des fonctions L'OAV/ROV s'applique. L'exemple spécifique que j'ai donné ici ne s'appliquerait pas à l'OAV, je n'en suis donc pas certain.