Heim >Backend-Entwicklung >C++ >Was ist der Unterschied zwischen universellen Referenzen und Weiterleitungsreferenzen 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!