0Pricing
C++ Academy · Lektion

Übergabe per Wert vs. per Referenz

Vergleichen Sie die semantischen und leistungstechnischen Unterschiede zwischen der Übergabe per Wert und per Referenz.

Übergabe per Wert vs. per Referenz ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Zusammenfassung: Übergabe per Wert

Wenn Sie ein Argument per Wert übergeben, erhält die Funktion eine Kopie. Änderungen innerhalb der Funktion wirken sich nicht auf den Aufrufer aus.

void increment(int x) {
    x++;          // modifies the copy
}

int n = 5;
increment(n);
std::cout << n;   // still 5

Übergabe per Referenz

Übergeben Sie per Referenz, indem Sie & in der Parameterliste verwenden. Die Funktion arbeitet direkt mit der Variable des Aufrufers.

void increment(int& x) {
    x++;
}

int n = 5;
increment(n);
std::cout << n;   // now 6

Warum per Referenz übergeben?

Zwei Gründe:

  • Kopieren vermeiden bei großen Objekten (Performance)
  • Die Variable des Aufrufers ändern (Semantik)

Const-Referenz: das Beste aus beiden Welten

Eine const-Referenz vermeidet das Kopieren, ohne der Funktion Änderungen zu erlauben. Verwenden Sie sie für nicht triviale Eingabeparameter.

void printName(const std::string& name) {
    std::cout << name;
}

Faustregeln

Für Funktionsparameter:

  • Günstig zu kopieren (int, double, pointer) → per Wert übergeben
  • Teuer zu kopieren und schreibgeschützt → const T&
  • Die Funktion ändert Daten des Aufrufers → T&

Übergabe per Zeiger

Auch Zeiger ermöglichen es, die Variable des Aufrufers zu ändern — der Aufrufer muss jedoch explizit mit & ihre Adresse übergeben, wodurch die Absicht sichtbar wird.

void increment(int* x) {
    (*x)++;
}

int n = 5;
increment(&n);

Referenz- oder Zeigerparameter

Referenzen sind geeigneter, wenn ein Wert immer erforderlich ist. Zeiger eignen sich, wenn das Argument optional ist — übergeben Sie nullptr, um es auszulassen.

Rückgabe per Wert

Die Rückgabe per Wert ist der Standard. Dank RVO (Return Value Optimization) und Move-Semantik ist sie normalerweise genauso schnell wie die Rückgabe per Referenz — und sicherer.

Rückgabe per Referenz

Geben Sie eine Referenz zurück, wenn die Funktion ein vorhandenes Objekt zurückgibt, das den Aufruf überlebt, beispielsweise ein Member eines Containers. Geben Sie niemals eine Referenz auf eine lokale Variable zurück.

Gemischte Übergabearten in Templates

Templates verwenden häufig universelle Referenzen (T&&) und std::forward, um Wertkategorien zu erhalten. Dies behandeln wir im Kurs zu Move-Semantik.

Häufiger Fehler: Slicing

Übergeben Sie abgeleitete Klassen per Referenz (oder Zeiger) an einen Basisklassenparameter. Bei der Übergabe per Wert wird der abgeleitete Teil des Objekts abgeschnitten.

class Base { /* virtual */ };
class Derived : public Base { /* members */ };

void takeByValue(Base b);    // SLICES Derived!
void takeByRef(Base& b);     // OK

Kurzer Test

Wie sollten Sie einen großen std::string übergeben, den die Funktion nur liest?

Zusammenfassung

Die Übergabe per Wert erstellt Kopien; die Übergabe per Referenz teilt das Objekt. Verwenden Sie const T& für schreibgeschützte große Objekte, T&, wenn Sie die Daten des Aufrufers ändern, und kleine integrierte Typen per Wert.

Häufig gestellte Fragen

Ist die Lektion „Übergabe per Wert vs. per Referenz“ kostenlos?

Ja — der vollständige Text von „Übergabe per Wert vs. per Referenz“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Übergabe per Wert vs. per Referenz“?

Vergleichen Sie die semantischen und leistungstechnischen Unterschiede zwischen der Übergabe per Wert und per Referenz. Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C++ Academy zu starten?

Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Übergabe per Wert vs. per Referenz“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?

Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Warum Referenzen Aliase für Variablen sind
  2. Übergabe per Wert vs. per Referenz
  3. const-Referenzen und ihr Einsatz
  4. Lebensdauer von Referenzen und hängende Referenzen
← Zurück zu C++ Academy