Nawiązując do komentarza zrobiłem w tej sprawie:miejscowi są zwracane automatycznie xvalues
passing std::vector to constructor and move semantics Czy std::move
konieczne w poniższym kodzie, aby upewnić się, że wartość zwracana jest xvalue?
std::vector<string> buildVector()
{
std::vector<string> local;
// .... build a vector
return std::move(local);
}
Rozumiem, że jest to wymagane. Nieraz widziałem to kiedyś po powrocie do std::unique_ptr
z funkcji, jednak GManNickG wykonany następujący komentarz:
To jest moje zrozumienie, że w instrukcji return wszystkie zmienne lokalne są automatycznie xvalues (upływającym wartości) i zostanie przeniesiony , ale nie jestem pewien, czy dotyczy to tylko zwróconego obiektu. Więc OP powinien iść dalej i umieścić to tam, dopóki nie będę bardziej pewny, że nie powinno tak być. :)
Czy ktoś może wyjaśnić, czy std::move
jest konieczne?
Czy kompilator zachowania jest zależny?
Uwaga pan kazał mi od zmodyfikować moje oświadczenie. Przesyłana jest tylko zwrócona wartość (która może być zmienną lokalną), a nie wszystkie zmienne lokalne. (Choć byłoby to miłe, prawdopodobnie łamie jakiś stary kod, którego nie mogę wymyślić, a progresja C++ musi zachować kompatybilność wsteczną.) – GManNickG