Bonjour,
Je me pose encore des questions sur le passage par référence, notamment après avoir lu une explication donnée par Claude Delennoy dans l'un de ses livres d'exercices. Après avoir rappelé le rôle du passage par référence, il ajoute:
"Toutefois, si l'argument muet est, de surcroît, déclaré avec l'attribut const, la fonction reçoit quand même une copie de l'argument effectif correspondant, lequel peut alors être une constante ou une expression d'un type susceptible d'être converti dans le type attendu."
Ma question est la suivante: Y a t'-il toujours copie de l'argument effectif dans le cas où l'attribut const est ajouté ? Ou bien y a t'-il copie uniquement dans les deux cas cités ci-dessus (ce que je croyais avoir compris avant) ?
Par ailleurs, dans tous les cas où il y a effectivement copie, le code ci-dessous correspondant à une fonction membre me pose un problème:
En effet, s'il y a copie, l'objet créé aura toujours une adresse différente du pointeur this. Donc, même si l'argument rhs fait référence au même objet que celui pointé par this, le test ne peut pas fonctionner !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 String& String::operator=(const String & rhs) { if (this == &rhs) return *this; . . . }
Si vous pouviez m'indiquer mon erreur, je vous en serait fort reconnaissant.
Partager