Это было бы бессмысленно. Вы изменили бы предмет в функции, и изменение было бы немедленно потеряно, потому что вещь была фактически временной.
Причина возникновения нового типа связана с необходимостью решить, что на самом деле является значением rvalue, а что нет. Только тогда вы можете использовать их для того, что они используют.
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));
}
Теперь, если у вас есть RValue и передать его TOUPPER, то Rvalue может напрямую быть изменен, потому что мы знаем, что временно это выбрасывать вещь в любом случае, так что мы можем Aswell просто изменить его и Дон» нужно скопировать его. Кроме того, одно и то же наблюдение используется для объекта, называемого move-constructors и move-assign. Правая сторона не копируется, но ее вещи просто украдены и перемещены в *this
.
Если бы вы сказали, что rvalues могут связываться с не-константными ссылками lvalue, то вы не сможете определить, ссылается ли это на значение lvalue (named object) или rvalue (временное) в конце.
Это, вероятно, более мало знают, но полезно в любом случае, вы можете положить Lvalue или RValue реф-отборочные на функцию члена. Вот пример, который естественным образом расширяет существующую семантику RValue ссылок на неявный параметр объекта:
struct string {
string& operator=(string const& other) & { /* ... */ }
};
Теперь вы не можете больше сказать
string() = "hello";
Что сбивает с толком и на самом деле не делаете смысл в большинстве случаев. То, что делает &
, говорит о том, что оператор присваивания может быть вызван только на lvalues. То же самое можно сделать для rvalues, положив &&
.
Интересно, почему это получило 3 голоса, но 7 фаворитов. Я не думаю, что когда-либо высказывал вопрос, не проголосовав за него (если я не был вне голоса или был заблокирован). – Zifre
Интересно, почему кто-то что-то думает, и тогда он ожидает, что все остальные будут делать то, что он делает. – user534498
Интересно, почему «быть красивым и дарить верх» является необоснованным ожиданием. –