Was ist der Unterschied zwischen call-by-reference und call-by-value-return
Wie der Titel schon sagt bin ich neugierig auf den Unterschied zwischen "call-by-reference" und "call-by-value-return". Gelesen habe ich darüber in der Literatur, und versucht, finden weitere Informationen auf dem internet, aber ich habe nur den Vergleich von "call-by-value" und "call-by-reference".
Ich verstehe den Unterschied bei Speicher-Ebene, nicht aber auf die "konzeptionelle" Ebene zwischen den beiden.
Das aufgerufene Unterprogramm wird eine Kopie der aktuellen parameter-Wert, um mit zu arbeiten, aber wird, wenn es endet, ausführen, kopieren Sie die neuen lokalen Wert (gebunden an den formalen parameter) zurück, der tatsächliche parameter des Aufrufers.
Wann wird call-by-value-return eigentlich lieber über "call-by-reference"? Alle Beispiel-Szenario? Alles was ich sehe ist, dass es dauert mehr Speicher und Ausführungszeit durch das kopieren der Werte in der memory-Zellen.
Als Zwischenfrage, ist "call-by-value-return" umgesetzt in "modernen" Sprachen?
InformationsquelleAutor Anders | 2013-08-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Call-by-value-return, von Wikipedia:
So, in der Praxis ist es durchaus möglich, dass eine variable in irgendeinem unerwünschten Zustand in der Mitte der Ausführung einer Funktion. Bei der Parallelverarbeitung ist dies ein problem, da Sie versuchen, Zugriff auf die variable, während es dies Wert. Kopieren Sie es auf einen temporären Wert, vermeidet dieses problem.
Als Beispiel:
Übernehmen
everyTimeSomeoneApproachesOrLeaves
undgoAboutMyDay
sind parallel ausgeführt werden.Also, wenn Sie als Verweis übergeben, könnten Sie am Ende immer
policeCount
Recht, nachdem es auf 0 festgelegt wurde, incalculatePoliceCount
, auch wenn es die Polizei etwa, dann würden Sie am Ende etwas illegales tun, und wahrscheinlich ins Gefängnis zu gehen, oder zumindest, hustete ein wenig Geld für ein Bestechungsgeld. Wenn Sie pass-by-value-return, wird das nicht passieren.Unterstützten Sprachen?
Meiner Suche fand ich heraus, dass Ada und Fortran unterstützt. Ich kenne keine andere.
InformationsquelleAutor Dukeling
Angenommen Sie haben eine call-by-reference-Funktion (in C++):
und rufen Sie es folgendermaßen:
Wird es nie beenden, weil
x
undy
sind, die die gleiche Referenz, jedes mal, wenn Sie Dekrementy
, die später rückgängig gemacht, indem die Schrittweite derx
(denn Sie sind beide wirklichz
unter der Haube).Dagegen mit call-by-value-return (in rostigen Fortran):
Rufen Sie diese routine mit der gleichen variable:
wird es noch beenden, und am Ende
z
wird geändert werden, haben einen Wert von entweder 10 oder 0, je nachdem, welches Ergebnis zuerst angewendet (ich erinnere mich nicht, wenn eine Besondere Bestellung erforderlich ist, und ich finde keine schnellen Antworten auf die Frage, online).InformationsquelleAutor Evan
Freundlich gehen Sie auf folgenden link , das Programm dort geben kann, u eine praktische Idee für die beiden .
Unterschied zwischen call-by-reference und call-by-value
InformationsquelleAutor HMcompfreak