2017-02-02 3 views
1

Sind die std::move am Ende der folgenden Funktion erforderlich (um zu vermeiden, die die Vektoren kopieren)?Verschieben Semantik und Rückgabewerte

std::pair<vector<int>, vector<int>> f() 
{ 
    vector<int> a, b; 
    ... 
    return std::make_pair(std::move(a), std::move(b)); 
} 

Oder wird der Compiler die Vektoren bewegen, auch wenn die std::move weggelassen werden?

Antwort

4

Die std::move s notwendig.

Wenn das, was Sie durften empfehlen, würde der folgende Code (überraschend) sein gebrochen, da beide Argumente std::make_pair würde fahrener aus:

std::vector<int> a; 
// populate a 
return std::make_pair(a, a); 
+0

Dank. Gute Antwort! – user763305