Entmystifizierung des doppelten kaufmännischen Und (T&&) in C 11
Im Vordergrund der Romanfunktionen von C 11 steht das doppelte kaufmännische Und (&&), wird oft in Variablendeklarationen wie T&& var gesehen. Aber was genau stellt diese rätselhafte Syntax dar?
Einführung in R-Wert-Referenzen
Das doppelte kaufmännische Und deklariert eine R-Wert-Referenz, wie im Standardvorschlagsdokument definiert. Im Gegensatz zu herkömmlichen Referenzen (in C 11 jetzt als L-Wert-Referenzen bezeichnet), die nur an L-Werte (benannte Objekte) gebunden werden können, können R-Wert-Referenzen an R-Werte, einschließlich temporärer Werte, gebunden werden.
Hauptunterschiede zu L-Wert-Referenzen
Der Hauptunterschied zwischen R-Wert-Referenzen und L-Wert-Referenzen ist der R-Wert Referenzen können an R-Werte gebunden werden, ohne dass das Schlüsselwort const erforderlich ist. Dies ermöglicht die folgende rechtliche Syntax:
T&& r = T();
Vorteile von R-Wert-Referenzen
R-Wert-Referenzen bieten mehrere wesentliche Vorteile:
1. Verschiebungssemantik:
R-Wert-Referenzen erleichtern die Implementierung von Verschiebungskonstruktoren und Verschiebungszuweisungsoperatoren, die eine effiziente Verschiebung von Ressourcen ermöglichen, ohne dass Daten unnötig kopiert werden müssen.
2. Perfekte Weiterleitung:
Mit R-Wert-Referenzen können Vorlagenfunktionen Argumente korrekt weiterleiten und dabei ihren L-Wert- oder R-Wert-Status beibehalten, was zu vielseitigerem und wartbarerem Code führt.
Eigenschaften von R-Wert Referenzen:
Beispiel: Umzug Semantik
Betrachten Sie den folgenden Kopierkonstruktor:
foo(foo const& other) { this->length = other.length; this->ptr = new int[other.length]; copy(other.ptr, other.ptr + other.length, this->ptr); }
Dieser Kopierkonstruktor könnte verbessert werden, indem eine R-Wert-Referenz in einen Verschiebungskonstruktor übernommen wird, der sein Argument ändert:
foo(foo&& other) { this->length = other.length; this->ptr = other.ptr; other.length = 0; other.ptr = nullptr; }
Dieser Verschiebungskonstruktor „verschiebt“ das Temporäre effektiv in das neu erstellte Objekt und vermeidet so Unnötiges Kopieren.
Schlussfolgerung:
R-Wert-Referenzen, gekennzeichnet durch das doppelte kaufmännische Und (&&), erweitern die Fähigkeiten von C durch die Einführung einer r-Wert-spezifischen Syntax. Sie ermöglichen Bewegungssemantik, perfekte Weiterleitung und eine verbesserte Effizienz beim Umgang mit temporären Objekten und festigen so ihre Bedeutung in der modernen C-Programmierung.
Das obige ist der detaillierte Inhalt vonWas bedeutet das doppelte kaufmännische Und (T&&) in C 11 wirklich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!