powiedzmy mam funkcję:Czy zwracane wartości będą przekazywane przez referencję rvalue w C++ 0x?
typedef std::vector<int> VecType;
VecType randomVector();
int processing()
{
VecType v = randomVector();
return std::accumulate(v.begin(), v.end(), 0);
}
Czy C++ 0x konkretnie znaczy nieprawdziwy kopia zostanie odwrócona od wartości zwracanej randomVector? A może kompilator musi wdrożyć RVO? Wydaje mi się, że wartość randomVector()
powinna być traktowana jako wartość r, a zatem powinien zostać wywołany konstruktor ruchu v, ale nie jestem do końca pewien, czy to prawda.
To nie jest dobre pytanie, IMHO. Standard nie może z pożytkiem określić, co może zrobić wdrożenie, tylko to, co MUSI zrobić. –
Właściwie w podanym przykładzie podanym dla Optymalizatora wartości zwracanej przez większość kompilatorów ... jest to efektywne bez wartości rvalue. Również rvalue jest ważniejsza dla przekazywania argumentów do funkcji. – Artyom
Tytuł pytania jest nieco mylący. Twoja funkcja zwraca wartość r, a nie referencję. Ale odwołanie do rwartowania może się z nim wiązać, co dzieje się w przypadku, gdy elizacja kopiowania nie może zostać wykonana z jakiegoś powodu, a typ ma konstruktor ruchu (parametr konstruktora ruchu jest odwołaniem do wartości r) – sellibitze