Parameterübergabe in C verstehen
Bei der Parameterübergabe in C sorgt die Auswahl der geeigneten Methode (nach Wert, Referenz oder R-Wert-Referenz) für Effizienz und Klarheit beim Codedesign . Hier sind Best Practices für jedes Szenario:
1. Übergeben von Lvalue-Referenz:
- Wenn der Parameter geändert werden muss und diese Änderungen für den Aufrufer sichtbar sein müssen.
- Beispiel: void foo(my_class& obj) ermöglicht Änderungen innerhalb der Funktion, um Änderungen im Originalobjekt widerzuspiegeln.
2. Übergeben von Lvalue-Referenzen an Const:
- Wenn der Status des Parameters nur beobachtet werden muss, ohne dass Änderungen erforderlich sind.
- Beispiel: void foo(my_class const& obj) ermöglicht den Zugriff auf die Daten des Objekts, ohne diese zu verändern Zustand.
3. Wertübergabe:
- Für grundlegende Typen (z. B. int, bool) oder Typen mit schnellem Kopieren priorisiert dieser Ansatz die Effizienz.
- Beispiel: void foo(my_class obj ) stellt sicher, dass ein Kopieren oder Verschieben erfolgt, je nachdem, ob es sich um einen L-Wert oder einen R-Wert handelt bestanden.
4. Erwägen Sie eine Überladung für L-Werte und R-Werte:
- Stellen Sie für Objekte mit teuren Verschiebungen separate Überladungen bereit, um L-Werte und R-Werte zu verarbeiten.
- Beispiel: Überladen Sie foo() mit my_class& und my_class&& um L-Wert-Referenz- bzw. R-Wert-Referenzszenarien zu verarbeiten.
5. Nutzen Sie Perfect Forwarding:
- Erstellen Sie eine Funktionsvorlage, die einen R-Wert-Verweis auf einen nicht angegebenen Typ akzeptiert und ihn mit std::forward weiterleitet.
- Beispiel: template
Bezüglich des bereitgestellten Codes:
Kreditkarte als Wertreferenz weitergeben:
- Der Anspruch von zwei Bewegungen und null Kopien sind falsch.
- Beim Übergeben eines R-Werts von CreditCard erfolgt nur eine Bewegung während der Referenzbindung.
Überladung für Konstruktor:
- Erwägen Sie die Erstellung separater Konstruktorüberladungen für die L-Wert-Referenz auf CreditCard und die R-Wert-Referenz auf Kreditkarte.
- Dieser Ansatz garantiert eine Kopie für L-Werte und einen Umzug für R-Werte, wodurch die Effizienz gesteigert und spezifische Anforderungen erfüllt werden.
Das obige ist der detaillierte Inhalt vonWie soll ich in C zwischen Wertübergabe, Referenz und R-Wert-Referenz wählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!