Ce serait inutile. Vous changeriez la chose dans la fonction, et le changement serait perdu immédiatement parce que la chose était en fait temporaire.
La raison du nouveau type découle du besoin de pouvoir décider ce qui est réellement une valeur et quoi d'autre. Seulement alors vous pouvez les utiliser pour les choses cool qu'ils sont utilisés.
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));
}
Maintenant, si vous avez des rvalue et passez à toUpper, le rvalue peut directement être modifiée, parce que nous savons que le temporaire est une chose à jeter de toute façon, donc on peut aswell changer juste et n » t besoin de le copier. En outre, la même observation est utilisée pour la chose appelée move-constructors et move-assignment. Le côté droit n'est pas copié, mais ses objets sont simplement volés et déplacés vers . Si vous deviez dire que les valeurs peuvent se lier à des références de lvalue non const, vous n'auriez aucun moyen de savoir si cela fait référence à une lvalue (objet nommé) ou à une valeur rvalue (temporaire) à la fin.
Il est probablement plus peu de savoir, mais utile de toute façon, vous pouvez mettre lvalue ou rvalue ref-qualificatifs sur une fonction membre. Voici un exemple qui étend naturellement la sémantique existante des références rvalue au paramètre d'objet implicite:
struct string {
string& operator=(string const& other) & { /* ... */ }
};
Maintenant, vous ne pouvez pas dire plus
string() = "hello";
Ce qui est source de confusion et n'est pas vraiment faire sentir la plupart du temps. Ce que dit le &
ci-dessus, c'est que l'opérateur d'affectation ne peut être invoqué que sur lvalues. La même chose peut être faite pour les valeurs, en mettant &&
.
Je me demande pourquoi cela a eu 3 votes mais 7 favoris. Je ne pense pas avoir jamais favorisé une question sans l'avoir votée (à moins que je ne sois exclu ou que je l'ai verrouillé). – Zifre
Je me demande pourquoi quelqu'un pense d'une certaine façon et ensuite il s'attend à ce que tous les autres fassent exactement ce qu'il fait. – user534498
Je me demande pourquoi "être gentil et donner un upvote" est une attente déraisonnable. –