Gegeben sei das Beispiel:
%Vor%Dabei ist m_Label eine private Klassenmitgliedsvariable.
Wie ich denke, dass ich es verstehe, gibt diese Funktion einen Verweis auf die Variable m_Label zurück. Was wären die Implikationen davon, dies während meines gesamten Programms zu verwenden, und wäre es besser, einfach den Wert anstelle der Referenz zurückzugeben? Vielen Dank!
Es gibt einen Verweis auf das private Mitglied zurück.
Es gibt viele Fälle, in denen dies wünschenswert ist, aber etwas Vorsicht ist geboten.
IMO Es ist im Allgemeinen keine gute Idee, eine Kopie eines internen Objekts, das kein integraler Typ ist, aus Gründen der allgemeinen Leistung zurückzugeben. Ja, ich weiß, vorzeitige Optimierung ist nicht gut, aber das ist nicht wirklich Optimierung, es ist nur eine gute Leistungspraxis, die es dem Anrufer ermöglicht, die Auswirkungen auf die Leistung zu bestimmen. Wenn es eine Kopie will, kann es einfach nicht die Variable deklarieren, der es als Referenz zugewiesen wird.
Es gibt zwei allgemeine Faustregeln, die ich hier verwende:
1) Wenn Sie nicht möchten, dass der Aufrufer das private Objekt direkt ändern kann, deklarieren Sie den Rückgabewert als const-Referenz:
%Vor%2) Ein Aufrufer sollte niemals den von einer Klassenmethode zurückgegebenen Verweis speichern. Er sollte nur lokal verwendet werden, wenn das übergeordnete Objekt garantiert im Gültigkeitsbereich ist.
Wenn Sie aus irgendeinem Grund Anrufer benötigen, um einen Verweis auf Ihre internen Objekte speichern zu können, verwenden Sie stattdessen Smartpointer.
Das Und-Zeichen steht nicht so lange vor dem Funktionsnamen wie nach dem Rückgabetyp. es gibt einen Verweis auf ein string
zurück.
Dies hat zur Folge, dass ein Aufrufer dieser Funktion den Wert von m_label
durch die Referenz ändern könnte. Auf der anderen Seite vermeidet es das Kopieren der Zeichenfolge. Möglicherweise möchten Sie, dass die Referenz und die Funktion const
lauten, also:
Das Beste aus beiden Welten. Sie vermeiden die Kopie, aber Anrufer können Ihr Objekt nicht ändern.
Das Zurückgeben einer Referenz bedeutet, dass der aufrufende Code den Wert Ihrer Mitgliedsvariablen nach der Rückkehr ändern kann. Das ist sehr gefährlich, es sei denn, du hast das beabsichtigt.
Besser ist ein const
Verweis oder Rückgabewert (ohne &
).
Du hast Recht. Es ist ein Verweis auf das String-Mitglied.
Die Implikation ist, dass, wenn ein Aufrufer einen Wert zuweisen oder die zurückgegebene Zeichenfolge ändern würde, dass sie auch die Elementvariable ändern würden. Wenn dies nicht die Absicht ist, können Sie eine Kopie nach Wert zurückgeben, um eine Kapselung zu vermeiden.
Tags und Links c++ pointers function pass-by-reference