Désistement: Je suis nouveau à C++.std :: unordered_set type de retour par référence vs valeur
J'ai un bloc de code comme ceci:
using BucketType = std::unordered_set<Bucket, BucketHash, BucketEqual>;
const BucketType& Range::buckets(int64_t value) {
BucketType buckets;
...
return std::move(buckets);
}
L'appelant appelle ce code comme ceci:
Range range;
auto buckets = range.buckets(11);
Problème:
Quand je retourne la référence des seaux comme le code ci-dessus, le buckets.size()
donne 140732261909672
cependant, j'ajoute seulement 2 seaux dans ma logique actuelle. Quand je change le code pour renvoyer la valeur au lieu de la référence, cela fonctionne parfaitement bien.
Des pointeurs sur ce qui pourrait ne pas fonctionner avec ce code?
Essayez de retirer le & de la renvoie le type de 'buckets'. –
N'utilisez pas 'std :: move' pour renvoyer une valeur à moins que ce ne soit le cas rare où c'est vraiment mieux. Non seulement les valeurs de retour seront-elles déplacées si possible, mais l'utilisation de 'std :: move' empêche en fait le résultat encore meilleur de (N) RVO. Maintenant, cela s'applique généralement pour les retours par valeur plutôt que par référence. Je ne suis pas sûr de ce que votre comportement souhaité est pour cette valeur de retour. – chris
Version plus courte: N'utilisez pas ['std :: move'] (http://en.cppreference.com/w/cpp/utility/move) sauf si vous savez ce qu'il fait et comment l'utiliser. – WhozCraig