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
DDDOriginal
2024-12-19 14:25:13672Durchsuche

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();

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);
}

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!

Stellungnahme:
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