免責事項:私はC++を初めて使用しています。std :: unordered_set戻り値の型vs値
私はこのようなコードブロックを持っている:
using BucketType = std::unordered_set<Bucket, BucketHash, BucketEqual>;
const BucketType& Range::buckets(int64_t value) {
BucketType buckets;
...
return std::move(buckets);
}
呼び出し側がこのようにこのコードを呼び出します。私のようなバケットの参照を返すとき
:
Range range;
auto buckets = range.buckets(11);
問題上記のコードでは、buckets.size()
は140732261909672
ですが、私は実際のロジックに2つのバケットしか追加していません。参照の代わりに値を返すようにコードを変更すると、正常に動作します。
このコードで何が間違っている可能性がありますか?
&から削除してくださいバケットの戻り値の型。 –
本当に最善であるまれなケースでない限り、値を返すために 'std :: move'を使用しないでください。できるだけ戻り値を移動させるだけでなく、 'std :: move'を使うことで、(N)RVOのさらに良い結果を実際に防ぐことができます。現在、これは一般に参照によるのではなく、バイナリの戻り値に適用されます。私はあなたの望む動作がこの戻り値に対して何であるか分かりません。 – chris
短いバージョン:動作と使用方法が分からない限り、['std :: move'](http://en.cppreference.com/w/cpp/utility/move)は使用しないでください。 – WhozCraig