Heim >Backend-Entwicklung >C++ >Wie ermöglichen C 11-Referenzkollabierungsregeln eine perfekte Weiterleitung?

Wie ermöglichen C 11-Referenzkollabierungsregeln eine perfekte Weiterleitung?

Linda Hamilton
Linda HamiltonOriginal
2024-12-26 22:27:13500Durchsuche

How Do C  11 Reference Collapsing Rules Enable Perfect Forwarding?

Rolle der Referenz-Kollapsregeln in C 11

Referenz-Kollapsregeln spielen eine entscheidende Rolle bei der Ermöglichung einer perfekten Weiterleitung in C 11. Perfekte Weiterleitung ermöglicht Funktionen zum nahtlosen Akzeptieren und Weitergeben von Parametern nach Wert, L-Wert-Referenz oder R-Wert Referenz.

Referenz-Kollapsregeln

Die Referenz-Kollapsregeln für C 11 sind:

  • A& & & -> A&
  • A& & & -> A&
  • A& & & -> A&
  • A& & & & & -> A& &

Begründung für das Zusammenklappen von Referenzen

Diese Regeln stellen sicher, dass, unabhängig davon, wie ein Parameter übergeben wird (durch L-Wert, R-Wert oder R-Wert-Referenz), es wird von der Empfangsfunktion immer als der gewünschte Typ für perfekt „gesehen“. Weiterleitung.

  • Zur L-Wert-Referenz: Wenn ein L-Wert per L-Wert-Referenz übergeben wird (z. B. T&), wandelt die Reduzierregel „& & &“ in „&“ um und stellt die bereit Korrekte L-Wert-Referenz für die Bindung an die nicht konstante L-Wert-Referenz des Empfängers.
  • Zu Const L-Wert Referenz: Bei der Übergabe eines konstanten L-Werts durch eine konstante L-Wert-Referenz (z. B. const T&) stellt die Kollapsregel sicher, dass die Konstanz erhalten bleibt und der Parameter an die richtige konstante L-Wert-Referenz im Empfänger gebunden wird.
  • An R-Wert-Referenz: Übergabe einer R-Wert-Referenz (z. B. T& &), unabhängig vom eingehenden Wert Typ, führt zu einem Zusammenbruch zu „& &“, was eine perfekte Weiterleitung von X-Werten (temporäre Objekte) und Pr-Werten (Funktionsrückgabewerte vom Typ T& &) ermöglicht.

Verwendung in C 11 STL-Dienstprogrammfunktionen

STL-Dienstprogrammfunktionen wie std::move() und std::forward() nutzen die Referenzreduzierung intern, um eine perfekte Weiterleitung zu ermöglichen. Zum Beispiel:

template<class T>
void Fwd(T & &v) {
  Call(std::forward<T>(v));
}

std::forward<> Reduziert „& &“ zu „&“ für L-Wert-Referenzen und „& &“ zu „& &“ für R-Wert-Referenzen, sodass Call seine Parameter im entsprechenden Format empfangen kann.

Beziehung mit std: :remove_reference

Dienstprogramme wie std::remove_reference können verwendet werden, um Referenzen aus einer Typableitung zu entfernen (z. B. std::remove_reference gibt T zurück). Es ersetzt jedoch nicht die Notwendigkeit von Regeln zum Reduzieren von Referenzen in C 11. std::remove_reference entfernt einfach die Referenzebenen, während das Reduzieren von Referenzen sicherstellt, dass der weitergeleitete Parameter im richtigen Format für eine perfekte Weiterleitung empfangen wird.

Das obige ist der detaillierte Inhalt vonWie ermöglichen C 11-Referenzkollabierungsregeln eine perfekte Weiterleitung?. 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