Heim >Backend-Entwicklung >C++ >Was ist der Unterschied zwischen universellen Referenzen und Weiterleitungsreferenzen in C?

Was ist der Unterschied zwischen universellen Referenzen und Weiterleitungsreferenzen in C?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-10 12:53:02523Durchsuche

What is the Difference Between Universal References and Forwarding References in C  ?

Das Konzept von Universal- und Weiterleitungsreferenzen verstehen

In C kann die Unterscheidung zwischen Universal- und Weiterleitungsreferenzen verwirrend sein. Obwohl sich beide Begriffe auf dasselbe Konzept beziehen, haben sich ihre genauen Definitionen im Laufe der Zeit weiterentwickelt.

In C 11 wurde der Begriff „universelle Referenz“ eingeführt, um die Fähigkeit eines Vorlagenparameters zu beschreiben, sowohl R-Wert- als auch L-Wert-Referenzen zu akzeptieren . Dies wurde durch die Verwendung einer rvalue-Referenz auf einen cv-unqualifizierten Vorlagenparameter erreicht.

Mit der Einführung von C 14 wurde jedoch ein präziserer Begriff eingeführt: „Weiterleitungsreferenz“. Gemäß der Definition im C 14-Standard ist eine Weiterleitungsreferenz „eine R-Wert-Referenz auf einen CV-unqualifizierten Vorlagenparameter“.

Hauptunterschied

Der Hauptunterschied zwischen universal und Weiterleitungsreferenzen liegt in ihrer Semantik. Während beide sowohl R-Wert- als auch L-Wert-Referenzen akzeptieren, stellt der Standard klar, dass für Weiterleitungsreferenzen der für ein bestimmtes Argument abgeleitete Typ „L-Wert-Referenz auf A“ ist, wenn das Argument ein L-Wert ist.

Weiterleitung

Es ist wichtig zu beachten, dass der Begriff „Weiterleitungsreferenz“ nicht die Verwendung von impliziert std::forward-Funktion innerhalb des Funktionskörpers. Der Weiterleitungsaspekt bezieht sich ausschließlich auf den Typableitungsprozess. Ob die Referenz anschließend weitergeleitet wird oder nicht, spielt keine Rolle.

Beispiel

Betrachten Sie die folgende Funktionsvorlage:

template<typename A>
void foo(A&& a) {
  // Forwarding does not occur here
}

In diesem Beispiel wird die Typ des Parameters a ist eine Weiterleitungsreferenz. Wenn ein L-Wert als Argument an diese Funktion übergeben wird, wird der Typ von a als „L-Wert-Referenz auf A“ abgeleitet. Der Funktionskörper führt jedoch keine Weiterleitung durch.

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen universellen Referenzen und Weiterleitungsreferenzen in C?. 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