Dnob > " comment cin fait-il pour avoir l´adresse des trucs qu´on lui passe"
c´est une histoire de fonctions dites, de L-Value, typique du C++ :
exemple :
class truc
{
private :
int a;
public;
/ /...
int get_a();
};
int truc::get_a()
{
return a;
}
Ceci déclaré, je fais, dans un main :
int v = get_a();
jusque la, tout va bien !
Mais maintenant, disons que mon but est décrire dans a.
Solution C : une méthode
void set_a(int);
Solution C++, utilisant la L-Value :
je remplace :
int& get_a();
avec toujours la meme implémentation, j´ai juste ajouté le &.
et la, j´ai le droit d´écrire, dans le main :
get_a() = 5;
et ça copie le a ! !!
En effet, ça te renvoie une référence vers a ( implicitement un pointeur finalement ! ), et non pas une copie, du coup, si tu la modifie, ça modifie celui de a.
Alors tu vas me dire, c´est dangereux, comment faire si je veux que mon a ne soit qu´en lecture, mais que je veux une référence quand meme ?
-->
const int& get_a();
et pour le cin, c´est pareil, le prototype doit etre, me semble t il :
template < class T>
istream& operator>>(const T&)
Ce qui fait que ce qui est est modifié modifie ta variable du main aussi
Les L-Value fonctions permettent donc de faire :
fonction() = variable;
L-Value signifie " Left Value" car on les met a gauche du signe = 