Passage par Référence / Valeur en C++
Je tiens à clarifier les différences entre les par valeur et par référence.
J'ai dessiné une image
Donc, pour le passage par valeur,
une copie identique d'un objet est créé avec une référence différente, et la variable locale est assigné à la nouvelle référence, de manière à pointer vers la nouvelle copie
Comment comprendre les paroles:
"
Si la fonction modifie la valeur, les modifications apparaissent également
dans le cadre de l'appel de la fonction de passage par valeur et par référence
"
Merci!
- Voir img363.imageshack.us/img363/7202/passbyvaluereferencehg1.jpg
- quelle est votre question?
Vous devez vous connecter pour publier un commentaire.
Je pense que beaucoup de confusion est généré par le fait de ne pas faire ce que l'on entend par passé par référence. Quand certaines personnes disent passer par référence ils signifient généralement pas l'argument lui-même, mais plutôt l'objet référencé. Certains autres disent que le passage par référence signifie que l'objet ne peut pas être modifié dans le destinataire de l'appel. Exemple:
Certaines personnes prétendent que le 1 et le 3 sont passer par référence, tandis que 2 serait le passage par valeur. Un autre groupe de gens disent tous, mais le dernier est le passage par référence, parce que l'objet lui-même n'est pas copié.
Je voudrais attirer une définition de ce là ce que je demande à être passer par référence. Un aperçu général sur il peut être trouvé ici: Différence entre les passer par référence et le passage par valeur. La première et la dernière sont le passage par valeur, et les deux du milieu sont passer par la référence:
Je vote pour la définition suivante:
Cela signifie que suivant est le passage par valeur:
1
est le passage par valeur, car il n'est pas directement lié. La mise en œuvre peut copier le temporaire et le lier ensuite que temporaire à la référence.2
est le passage par valeur, parce que la mise en œuvre initialise une temporaire de la littéralité et se lie alors à la référence.3
est le passage par valeur, parce que le paramètre n'a pas de type de référence.4
est le passage par valeur pour la même raison.5
est le passage par valeur, parce que le paramètre n'a pas de type de référence. Les cas suivants sont passage par référence (par les règles de 8.5.3/4 et autres):Lors du passage par valeur:
et puis l'appel de
vous permettra de construire un
Object
sur la pile, et dans la mise en œuvre defunc
il sera référencé paro
. Ce peut être une copie (de l'intérieur dea
eto
peut-être les mêmes données), de sortea
peut être changé. Toutefois, sio
est une copie en profondeur dea
, puisa
ne changera pas.Lors du passage par référence:
et puis l'appel de
vous ne serez en donnant une nouvelle façon de référence
a
. "a
" et "o
" sont deux noms pour le même objet. Changero
à l'intérieur defunc2
fera de ces changements visibles pour l'appelant, qui sait l'objet par le nom de "a
".Merci beaucoup à tous pour tous ces commentaires!
J'ai cité cette phrase à partir d'un cours en ligne:
http://www.cs.cornell.edu/courses/cs213/2002fa/lectures/Lecture02/Lecture02.pdf
la première page le 6 diapositive
"
Le passage par VALEUR
La valeur d'une variable est transmise à la fonction
Si la fonction modifie la valeur, les modifications restent au sein de l'
la portée de cette fonction.
Passage par RÉFÉRENCE
Une référence à la variable est transmise à la fonction
Si la fonction modifie la valeur, les modifications apparaissent également
dans le cadre de l'appel de la fonction.
"
Merci beaucoup encore une fois!
Je ne suis pas sûr si je comprends votre question correctement. C'est un peu floues. Cependant, ce qui pourrait être source de confusion vous est la suivante:
Lorsque le passage par référence, une référence au même objet est passé à la fonction appelée. Toute modification de l'objet sera reflétée dans l'objet d'origine et, partant, l'appelant va le voir.
Lors du passage par valeur, le constructeur de copie sera appelée. Le constructeur de copie par défaut ne fera que d'une copie, par conséquent, si la fonction appelée modifie un entier dans l'objet, ce ne sera pas vu par l'appel de la fonction, mais si les changements de la fonction d'une structure de données pointé par un pointeur à l'intérieur de l'objet, puis ce sera vu par l'appelant en raison de la faible copie.
Je pourrais avoir mal compris votre question, mais j'ai pensé que je donnerais un coup de poignard de toute façon.
Comme je l'analyser, ces mots sont faux. Il faut lire "Si la fonction modifie la valeur, les modifications apparaissent également dans le champ d'application de la fonction d'appel lorsque le passage par référence, mais pas lors du passage par valeur".
Ma compréhension des mots "Si la fonction modifie la valeur, les modifications apparaissent également dans le champ d'application de la fonction d'appel pour les deux passage par valeur et par référence", c'est qu'ils sont une erreur.
Les Modifications effectuées dans une fonction appelée sont pas dans le champ d'application de la fonction d'appel lors du passage par valeur.
Soit vous avez mal tapé les mots cités ou ils ont été extraits de quel que soit le contexte fait ce qui semble être le mal.
Pourriez vous s'il vous plaît vous assurer que vous avez correctement cité vos sources et si il n'y a pas d'erreurs, il y un plus le texte qui entoure cette instruction dans le matériel source.