Ist dieser Absatz in Code Complete 2 rückwärts oder verstehe ich ihn falsch?

8

In Kapitel 13 gibt es einen Absatz, wenn es um Zeiger geht:

Manchmal möchten Sie jedoch die Semantik der Übergabe als Referenz haben - das heißt, dass das übergebene Objekt nicht geändert werden sollte - mit der Implementierung der Übergabe als Wert - das heißt, dass das eigentliche Objekt anstelle einer Kopie übergeben wird.

Es scheint, als hätte der Autor einen Fehler gemacht und die beiden verwechselt. Ist das wahr oder verstehe ich nicht, was er richtig sagt?

mowwwalker
quelle

Antworten:

12

Sie haben Recht und dies ist bereits auf der Errata-Seite des Buches.

Referenz sollte Wert sein Auf Seite 333 ändern Sie: "Manchmal möchten Sie jedoch die Semantik einer Übergabe als Referenz haben." An "Manchmal möchten Sie jedoch die Semantik einer Übergabe als Wert haben."

Wert sollte Referenz sein Auf Seite 333 ändern Sie: "mit der Implementierung eines Pass-by-Wertes" To: "mit der Implementierung eines Pass-by-Referenz"

Clement J.
quelle
3

Ja, es scheint durcheinander zu sein. Schalten Sie es um und fügen Sie etwas mehr hinzu, und es macht Sinn.

Manchmal möchten Sie die Implementierung des Wertes übergeben - das heißt, das übergebene Objekt ist eine Kopie, und Änderungen wirken sich nicht auf das Original aus - mit der Semantik der Referenzübergabe - das heißt, das Objekt selbst wird nicht übergeben.

Dies wäre so etwas wie ein konstanter Referenzparameter. Dies würde es Ihnen ermöglichen, eine große, veränderbare Struktur zu haben, die im Kontext einer bestimmten Funktion unveränderlich war.

jmoreno
quelle
1
Wollten Sie "Implementierung" und "Semantik" sowie "Wert" und "Referenz" wechseln? Denn für mich wäre es sinnvoller gewesen, wenn Sie "Implementierung" und "Semantik" unverändert beibehalten und nur "Wert" und "Referenz" vertauscht hätten. Was meinst du auch mit "const reference paramater (existiert nicht)"? Const-Referenzen existieren.
sepp2k
2
Was meinst du, existiert nicht? const T&existiert absolut in C ++.
DeadMG
1
Mein Fehler bei der Konstantenreferenz.
jmoreno