Byłoby to bezcelowe. Zmieniłbyś rzecz w funkcji, a zmiana zostałaby natychmiast utracona, ponieważ rzecz była w rzeczywistości chwilowa.
Powód nowego typu wynika z potrzeby decydowania o tym, co faktycznie jest wartością rażenia, a co nie. Tylko wtedy możesz je wykorzystać do fajnych rzeczy, które są używane.
string toupper(string && s) { // for nonconst rvalues
for(char &c : s) make_uppercase(c);
return move(s); // move s into a returned string object
}
string toupper(string const& s) { // for the rest
// calls the rvalue reference version, by passing
// an rvalue copy.
return toupper(string(s));
}
Teraz, jeśli masz jakieś rvalue i przekazać go do TOUPPER The RValue mogą być bezpośrednio modyfikowane, ponieważ wiemy, że tymczasowy jest rzeczą jednorazowe i tak, więc możemy aswell wystarczy zmienić go i don” t potrzebujesz go skopiować. Również ta sama obserwacja jest używana do rzeczy zwanej konstruktorem ruchu i przeniesieniem. Prawa strona nie jest kopiowana, ale jej rzeczy są po prostu skradzione i przeniesione do *this
.
Jeśli miałbyś powiedzieć, że wartości r można powiązać z niestanowiącymi wartościami lwartości, to nie będziesz w stanie określić, czy odnosi się to do lwartości (nazwanego obiektu), czy też wartości r (na końcu).
To chyba niewiele więcej wiem, ale przydatny w każdym razie, można umieścić lwartości lub rvalue Ref-kwalifikacyjne na funkcję członka. Oto przykład, który w naturalny sposób rozszerza istniejące semantyki referencji rvalue do niejawnego parametru obiektu:
struct string {
string& operator=(string const& other) & { /* ... */ }
};
Teraz nie można już powiedzieć
string() = "hello";
Który jest mylące i nie jest tak naprawdę czyni czuć przez większość czasu. To, co powyżej, mówi, że operator przypisania może być wywoływany tylko na wartościach l. To samo można zrobić dla wartości r, umieszczając &&
.
Zastanawiam się, dlaczego dostałem 3 głosy w górę, ale 7 ulubionych. Nie sądzę, żebym kiedykolwiek faworyzował pytanie bez jego głosowania (chyba że byłbym poza głosami lub był zamknięty). – Zifre
Zastanawiam się, dlaczego ktoś myśli w jakiś sposób, a następnie oczekuje, że wszyscy inni będą robić to samo, co on. – user534498
Zastanawiam się, dlaczego "bycie miłym i dawanie uprowadzenia" jest nieuzasadnionym oczekiwaniem. –