#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)
은 C++ 11에서 f(const vector<int>&)
또는 f(vector<int>&&)
으로 전화 할 예정입니까?C++ 11은 죽어가는 객체가 인수로 복사되지 않고 이동된다는 것을 보장합니까?
아니오; 이 경우'f (const std :: vector &')를 호출 할 것이다. 당신이 만들고있는 호출에서,'coll'은 명명 된 lvalue입니다. 'coll'이 다음 라인에서 범위를 벗어날 것이라는 사실은 부적합합니다. 만약 rvalue 버전의'foo'를 호출하고 싶다면,'f (std :: move (coll))'를 사용해야합니다. –
당신은 무엇을 의미합니까? "콜이 죽어 가고 있습니다"_? 통화가 끝나면 파괴 될 것입니다. 당신은'foo (vector())와 같은 것을 의미했을 것입니다. ' –
'coll'은 중괄호 ({}')가 끝날 때까지 "죽어 가고"있지 않습니다. 중괄호 안에는 완벽하게 건강합니다 :-) 그러므로, 만약 당신이 rvalue를 얻길 원한다면 명시 적으로'std :: move (coll)'가 필요합니다 – AndyG