No tendría sentido. Cambiarías la cosa en la función, y el cambio se perdería inmediatamente porque la cosa era en realidad temporal.
El motivo del nuevo tipo surge de la necesidad de poder decidir qué es realmente un valor r y qué no. Solo entonces puedes usarlos para las cosas geniales que se usan.
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));
}
Ahora, si tiene algún valor de lado derecho y pasarlo a toupper, el valor de lado derecho se puede directamente ser modificado, porque sabemos que el temporal es una cosa de usar y tirar de todos modos, por lo que puede aswell simplemente cambiarlo y don' Necesito copiarlo. Además, la misma observación se usa para lo que se llama movimiento-constructores y movimiento-asignación. El lado derecho no se copia, pero sus cosas se acaban de robar y se mueven al *this
.
Si dijera que los rvalues pueden vincularse a las referencias de lvalue no const, entonces no tendría forma de averiguar si eso hace referencia a un lvalue (objeto con nombre) o un valor de r (temporal) al final.
Es probablemente más pocos conocimientos, pero útil de todos modos, se puede poner REF-calificadores lvalue o rvalue en una función miembro. Este es un ejemplo, que, naturalmente, se extiende la semántica de referencias existentes rvalue al parámetro objeto implícito:
struct string {
string& operator=(string const& other) & { /* ... */ }
};
Ahora, no se puede decir más
string() = "hello";
Cuál es confuso y no es realmente hacer sentir la mayor parte del tiempo. Lo que hace el &
anterior es decir que el operador de asignación solo puede invocarse en lvalues. Lo mismo se puede hacer para los valores r, poniendo &&
.
Me pregunto por qué esto obtuvo 3 votos pero 7 favoritos. No creo haber favorecido alguna vez una pregunta sin votarla (a menos que no obtuviera votos o que estuviera bloqueada). – Zifre
Me pregunto por qué alguien piensa de alguna manera y luego espera que todos los demás hagan exactamente lo mismo que él. – user534498
Me pregunto por qué "ser amable y dar un voto positivo" es una expectativa irracional. –