Heim > Backend-Entwicklung > C++ > Was bedeutet das doppelte kaufmännische Und (T&&) in C 11 wirklich?

Was bedeutet das doppelte kaufmännische Und (T&&) in C 11 wirklich?

DDD
Freigeben: 2024-12-19 14:25:13
Original
628 Leute haben es durchsucht

What Does the Double Ampersand (T&&) in C  11 Really Mean?

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();
Nach dem Login kopieren

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:

  • Überladungsauflösung begünstigt L-Wert-Referenzen für L-Werte und R-Wert-Referenzen für R-Werte.
  • R-Wert-Referenzen können an temporäre Dateien gebunden werden, die aus impliziten Konvertierungen resultieren.
  • Benannte R-Wert-Referenzen sind L-Werte, während unbenannte R-Wert-Referenzen R-Werte sind.

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);
}
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage