Heim  >  Artikel  >  Backend-Entwicklung  >  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-17 09:29:03973Durchsuche

What's the Difference Between Universal References and Forwarding References in C  ?

Universelle und Weiterleitungsreferenzen: Eine umfassende Erklärung

In C verwenden Programmierer häufig Referenzen, um Daten an Funktionen zu übergeben. Wenn Sie einen Funktionsparameter als R-Wert-Referenz definieren (z. B. void f(int && i)), wird das Funktionsargument an eine R-Wert-Referenz gebunden. Umgekehrt kann ein als T && deklarierter Vorlagenfunktionsparameter verwendet werden. t kann entweder an eine R-Wert- oder eine L-Wert-Referenz gebunden werden.

Diese beiden Parametertypen haben Diskussionen ausgelöst, wobei einige letztere als „universelle Referenz“ und andere als „Weiterleitungsreferenz“ bezeichnen.

Universelle Referenz vs. Weiterleitungsreferenz

Der Begriff „universelle Referenz“ wurde ursprünglich geprägt von Scott Meyers, um die Fähigkeit einer R-Wert-Referenz auf einen cv-unqualifizierten Vorlagenparameter zu beschreiben, sich selbst entweder als Wert oder als L-Wert-Referenz abzuleiten. Mit C 17 wurde jedoch ein neuer Begriff eingeführt: „Weiterleitungsreferenz“.

Gemäß dem C-Standard ist eine „Weiterleitungsreferenz“ als R-Wert-Referenz auf einen cv-unqualifizierten Vorlagenparameter definiert. Wenn das Funktionsargument ein L-Wert ist, wird für die Typableitung der Typ „L-Wert-Referenz auf A“ verwendet.

Daher sind universelle Referenzen und Weiterleitungsreferenzen synonym, und der derzeit bevorzugte Begriff im C-Standard ist „Weiterleitung“. reference."

Referenzen weiterleiten und std::forward()

Die Funktion std::forward() leitet sein Argument an eine andere Funktion oder ein Funktionsobjekt weiter. Es wird häufig verwendet, um den Typ eines Arguments beizubehalten, insbesondere wenn es sich bei dem Argument um eine universelle Referenz handelt. Die Verwendung von std::forward() ist jedoch keine Voraussetzung dafür, dass ein Parameter als Weiterleitungsreferenz betrachtet wird.

Fazit

Weiterleitungsreferenzen bieten eine flexible Möglichkeit zur Handhabung Funktionsparameter. Sie können an R-Wert- oder L-Wert-Referenzen gebunden werden, was Komfort und Flexibilität bei der Codeentwicklung bietet. Um effizienten und wartbaren C-Code zu schreiben, ist es wichtig, den Unterschied zwischen Weiterleitungsreferenzen und universellen Referenzen zu verstehen.

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