2017-07-27 3 views
1

J'utilise C++ 11 depuis un certain temps mais j'ai toujours évité d'utiliser std :: move parce que j'avais peur, en lisant une bibliothèque où l'utilisateur ne pas avoir l'accès au code, il essaierait d'utiliser la variable après l'avoir déplacée.Utilisation de std :: move et prévention d'une utilisation ultérieure des données

Donc, fondamentalement, quelque chose comme

void loadData(std::string&& path); 

ne serait pas suffisant pour faire comprendre à l'utilisateur qu'il sera déplacé. Est-il prévu que l'utilisation de & & impliquerait que les données seront déplacées. Je sais que les commentaires peuvent être utilisés pour expliquer le cas d'utilisation, mais beaucoup de gens ne font pas attention à cela.

Est-il sûr de supposer que lorsque vous voyez un & & les données seront déplacées, ou quand dois-je utiliser std :: move et comment le rendre explicite à partir de la signature.

Répondre

2

Est-il prévu que l'utilisation de & & impliquerait que les données seront transférées.

En général oui. Un utilisateur ne peut pas appeler loadData avec une valeur lvalue. Ils doivent fournir une prvalue ou une valeur x. Donc, si vous avez une variable à passer, votre code ressemblera généralement à loadData(std::move(variable)), ce qui est un bon indicateur de ce que vous faites de votre côté. forward ING pourrait également être employé, mais vous le verriez toujours sur le site d'appel.

En effet, il est en général extrêmement grossier pour passer d'un paramètre qui est pas une référence rvalue.