Heim >Backend-Entwicklung >C++ >Wie wähle ich den richtigen Parameterübergabemechanismus in C aus?
Wertübergabe: Erstellt eine neue Kopie des Arguments; das Original bleibt unverändert.
Übergabe von Lvalue-Referenz:Ändert das Originalobjekt; erfordert eine stabile Identität (L-Wert).
Übergabe von L-Wert-Referenz an Const: Beobachtet das ursprüngliche Objekt, ohne es zu ändern; akzeptiert sowohl l-Werte als auch r-Werte.
Übergabe von r-Wert-Referenz: Bindet an r-Werte (temporäre oder Move-from-Objekte); kann Verschiebungsoperationen ausführen.
Verwenden Sie eine L-Wert-Referenz für Änderungen:
Wenn eine Funktion das ursprüngliche Objekt ändern muss, übergeben Sie eine L-Wert-Referenz (& ).
Verwenden Sie eine L-Wert-Referenz auf Const für Beobachtung:
Für Funktionen, die nur den Zustand des Objekts beobachten, übergeben Sie eine L-Wert-Referenz an const (const &).
Erwägen Sie die Übergabe eines Werts für nicht kopierintensive Typen :
Wenn Kopien kostengünstig sind (z. B. Ganzzahlen, Zeichen), sollten Sie vorbeischauen Wert.
Überladung für L-Werte und R-Werte (falls erforderlich):
Erstellen Sie separate Überladungen, wenn teure Bewegungen erforderlich sind und Sie Bewegungen von L-Werten vermeiden möchten.
Nutzen Sie Perfect Forwarding für die generische Handhabung:
Verwenden Sie Funktionsvorlagen und std::forward automatisch Bestimmen Sie basierend auf dem Argumenttyp (rvalue/lvalue), ob kopiert oder verschoben werden soll.
CreditCard-Klasse: Erwägen Sie, den Konstruktor mit zwei Versionen zu überladen:
CreditCard(CreditCard const& other); // lvalue reference to copy CreditCard(CreditCard&& other); // rvalue reference to move
Kontoklasse mit Kreditkartenmitglied:
Verwenden Sie eine der folgenden Möglichkeiten Konstruktoren basierend auf dem gewünschten Verhalten:
Account(std::string number, float amount, CreditCard const& creditCard); // Copy Account(std::string number, float amount, CreditCard&& creditCard); // Move
Kontoklasse mit Vektor von Kontenmitgliedern:
Übergabe per Referenz oder Konstantenreferenz, je nachdem, ob Änderungen erwartet werden.
Client(std::string firstName, std::string lastName, std::vector<Account> accounts); // Reference for modification Client(std::string firstName, std::string lastName, std::vector<const Account> accounts); // Reference to const for observation
Das obige ist der detaillierte Inhalt vonWie wähle ich den richtigen Parameterübergabemechanismus in C aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!