const-Referenzen und ihr Einsatz
Übergeben Sie große Objekte effizient und sicher mit const-Referenzen.
const-Referenzen und ihr Einsatz ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 3 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.
Was eine Const-Referenz verspricht
Eine const T&-Referenz sagt: "Ich werde das Objekt, auf das ich verweise, nicht ändern." Der Compiler erzwingt dies.
void print(const std::string& s) {
// s.clear(); // ERROR: s is const
std::cout << s;
}Warum nicht einfach per Wert übergeben?
Das Kopieren großer Objekte ist ineffizient. Eine Const-Referenz ist praktisch kostenlos (intern ist sie nur ein Zeiger) und erlaubt der Funktion niemals, die Daten des Aufrufers zu ändern.
An alles binden
Eine Const-Referenz kann an Lvalues, Rvalues und temporäre Objekte gebunden werden — dadurch ist sie der flexibelste Parametertyp für den schreibgeschützten Zugriff.
void f(const std::string& s);
std::string a = "hi";
f(a); // lvalue
f("hello"); // temporary string
f(std::move(a)); // rvalueVerlängerte Lebensdauer
Das Binden eines temporären Objekts an eine Const-Referenz verlängert die Lebensdauer des temporären Objekts auf die der Referenz. Nützlich für Inline-Konstruktion.
const std::string& greeting = "Hello, " + name;
// the concatenated string lives as long as `greeting`Wann Sie keine Const-Referenz verwenden sollten
Übergeben Sie trivially copyable Typen (int, double, pointer) per Wert. Die Referenz fügt eine Indirektion hinzu, ohne etwas einzusparen.
Const-Referenz in Range-Based-for-Schleifen
Die übliche schreibgeschützte Schleife. Sie vermeidet sowohl Kopien als auch versehentliche Änderungen.
for (const auto& x : container) {
process(x);
}Rückgabe einer Const-Referenz
Geben Sie eine Const-Referenz zurück, wenn das Ergebnis ein vorhandenes Objekt ist, das der Aufrufer nicht ändern soll, beispielsweise ein Member oder ein zwischengespeicherter Wert.
class Person {
std::string name_;
public:
const std::string& name() const { return name_; }
};Const-Korrektheit
Kennzeichnen Sie jeden Parameter und jede Memberfunktion, die den Zustand nicht ändern, als const. Der Compiler erkennt versehentliche Schreibzugriffe — ein leistungsfähiges Sicherheitsnetz.
Const-Memberfunktionen
Eine Memberfunktion, die nach der Parameterliste mit const gekennzeichnet ist, kann das Objekt nicht ändern. Sie kann für const-Instanzen aufgerufen werden.
class Counter {
int n_ = 0;
public:
int value() const { return n_; } // pure reader
void increment() { n_++; }
};Fallstrick: const_cast entfernt const
Sie können const mit const_cast entfernen — bei einem ursprünglich als const deklarierten Objekt führt dies jedoch zu undefiniertem Verhalten. Verwenden Sie dies nur bei der Anbindung an ältere APIs, die keine const-Parameter unterstützen.
Mutable für internen Zustand
Das Schlüsselwort mutable ermöglicht es einer Const-Memberfunktion, bestimmte Member zu ändern — nützlich für Caching oder Mutexes.
class Cache {
mutable std::mutex mtx_;
mutable std::optional<int> cached_;
public:
int value() const {
std::lock_guard<std::mutex> lk(mtx_);
// ...
}
};Kurzer Test
Warum ist es für einen Parameter normalerweise besser, const std::string& statt std::string zu schreiben?
Zusammenfassung
Verwenden Sie const T& für schreibgeschützte Parameter, Rückgabewerte von Gettern und Range-Based-for-Schleifen. Bei nicht trivialen Typen ist dies schneller als die Übergabe per Wert und sicherer als nicht konstante Referenzen.
Häufig gestellte Fragen
Ist die Lektion „const-Referenzen und ihr Einsatz“ kostenlos?
Ja — der vollständige Text von „const-Referenzen und ihr Einsatz“ 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 „const-Referenzen und ihr Einsatz“?
Übergeben Sie große Objekte effizient und sicher mit const-Referenzen. 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 3 von 4.
Wie lange dauert die Lektion „const-Referenzen und ihr Einsatz“?
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
- Warum Referenzen Aliase für Variablen sind
- Übergabe per Wert vs. per Referenz
- const-Referenzen und ihr Einsatz
- Lebensdauer von Referenzen und hängende Referenzen