Regeln für die Verwendung von Referenzen in C ++ [duplizieren]

8

Gibt es in C ++ eine Art Regel oder Anleitung, wann genau man sich für die Verwendung von Vorübergehender Referenzen entscheiden sollte?

Und wenn es um die Größe des Objekts mit einem Objekt soweit bekannt ist ( wenig ehrlich ) kann es schwierig werden, das zu beurteilen.

    
Amani 19.12.2012, 07:52
quelle

4 Antworten

7

Sie sollten als Referenz übergeben werden, wenn Änderungen an den Argumenten außerhalb der Funktion sichtbar sein sollen. Dies ist ein Durchlauf von nicht const Referenz und ist meist durch Logik statt Effizienz motiviert.

Sie sollten die Referenz (meistens const ) verwenden, wenn Sie mit Datentypen arbeiten, deren Größe größer ist als die eines Registers. Da die Referenz meistens const ist, können Sie keine Änderungen daran vornehmen, daher ist dies auf Effizienz zurückzuführen.

    
Luchian Grigore 19.12.2012, 07:54
quelle
3
  1. Wenn Sie den Kopierkonstruktor des Objekts nicht aufrufen möchten (z. B. wenn das Objekt aufgrund der Objektgröße expansiv ist).
  2. Wenn Sie die Referenz tatsächlich benötigen, und nicht nur den Wert ( swap(a,b) , zum Beispiel - da Sie tatsächlich die Originalreferenzen benötigen, um den Austausch durchzuführen.)
amit 19.12.2012 07:54
quelle
3

Normalerweise verwende ich in den folgenden Situationen "pass by reference":

1) Das Objekt ist größer als ein Zeiger: Wenn das Objekt nicht geändert werden soll, verwenden Sie einen konstanten Verweis:

%Vor%

mit foo erklärt als:

%Vor%

2) Um den Code zu verdeutlichen, versuchen Sie, Thigs wie folgt zu vermeiden:

%Vor%

unter Verwendung einer Struktur:

%Vor%

mit foo definiert als:

%Vor%

3) für Beschleunigungsmodule: Denken Sie daran, dass Aufruffunktionen Parameter auf Stack setzen müssen 4) Sie müssen Parameter innerhalb der Funktion ändern.

%Vor%

mit foo erklärt als:

%Vor%     
Tio Pepe 19.12.2012 08:00
quelle
1

Bevorzugt pass-by-reference-to-const bis pass-by-value . Wertübergabe ist eine teure Operation, da Kopien des Objekts von Kopier-Costruktoren erstellt werden. Wenn Sie einige nicht-primitive Datenelemente in der Klasse haben (zB: std::string ), würden jedes Mal, wenn ein neues Objekt der Klasse erstellt wird, auch diese std::string -Objekte erstellt.

Durch den Verweis wird auch slicing problem vermieden. Wenn Sie ein abgeleitetes Klassenobjekt als Wert an eine Funktion übergeben, die das Basisklassenobjekt erwartet, werden die abgeleiteten Merkmale der abgeleiteten Klasse abgeschnitten und das Objekt in der Funktion würde sich wie ein Basisklassenobjekt verhalten. Wenn Sie als Referenz übergeben werden, kann Slicing vermieden werden.

Trotzdem gibt es einige Fälle, in denen Sie nicht als Referenz durchgehen können. Wenn Ihre Funktionsargumente oder der Rückgabewert NULL-Werte haben müssen, können Sie keine Referenzen verwenden.

    
Sanish 19.12.2012 08:15
quelle

Tags und Links