#include <vector>
using namespace std;
void f(const vector<int>&) {}
void f(vector<int>&&) {}
int main()
{
{
vector<int> coll;
//
// coll is dying, so,
// "f(coll)" will call "f(const vector<int>&)" or
// "f(vector<int>&&)" as per C++11?
//
f(coll);
}
}
上記のコードでは、coll
が死んでいます。だから、f(coll)
はf(const vector<int>&)
またはf(vector<int>&&)
をC++ 11と呼ぶでしょうか?C++ 11は、死にかけているオブジェクトが引数としてコピーされるのではなく移動されることを保証しますか?
いいえ;この場合、 'f(const std :: vector&')を呼び出します。あなたが作っている呼び出しでは、 'coll'は名前付きの左辺値です。 'coll'が次の行のスコープから外れるという事実は無関係です。右辺の 'foo'を呼び出す場合は、' f(std :: move(coll)) 'を使うべきです。 –
あなたは何を意味していますか?コール後に破棄されます。あなたは 'foo(vector());' –
'coll'のようなものを意味していました。ブレース内では完全に健全です:-)したがって、右辺値を取得したい場合は、明示的な 'std :: move(coll)'が必要です – AndyG