Heim  >  Artikel  >  Backend-Entwicklung  >  Warum verwendet C dieselbe Syntax (T&&) für Weiterleitungsreferenzen und Rvalue-Referenzen?

Warum verwendet C dieselbe Syntax (T&&) für Weiterleitungsreferenzen und Rvalue-Referenzen?

Linda Hamilton
Linda HamiltonOriginal
2024-11-06 06:31:02614Durchsuche

Why Does C   Use the Same Syntax (T&&) for Forwarding References and Rvalue References?

Begründung hinter der Syntax, die von Weiterleitungs- und R-Wert-Referenzen gemeinsam genutzt wird

Ursprüngliche Frage

Warum haben universelle Referenzen dieselbe Syntax (T&&) wie R-Wert-Referenzen? ? Ist das nicht verwirrend?

Antwort

Eine universelle Referenz (T&&) kann T als „Objekttyp“ oder „Referenztyp“ ableiten. Wenn ein R-Wert übergeben wird, leitet T zu int ab, was zu einem int&&-Parameter führt. Wenn ein L-Wert übergeben wird, wird T auf int& abgeleitet und aufgrund der Referenzkollabierungsregeln auf int& reduziert.

Wenn T nicht abgeleitet werden kann (z. B. im X::baz-Beispiel), handelt es sich nicht um eine universelle Referenz.

Begründung

Die Verwendung derselben Syntax für universelle Referenzen und R-Wert-Referenzen optimiert die Ableitung von Vorlagenargumenten und die Regeln zum Reduzieren von Referenzen. Die vorgeschlagene Optimierung ermöglicht die Ableitung von Vorlagenparametern als Referenztypen und löst so das Weiterleitungsproblem.

Alternative Syntaxen wie T&&&&&, T@ oder T&42 wurden in Betracht gezogen, aber abgelehnt. Sie hätten zu Verwirrung geführt, da der Deklarator T&&&@ keinen tatsächlichen Typ darstellen könnte (er würde immer auf int&& oder int& verweisen).

Die aktuelle Syntax stimmt mit dem breiteren Typsystem überein: Wenn T eine L-Wert-Referenz ist, T&& ist auch. Die Regeln sind konsistent und vermeiden unnötige Komplexität.

Das obige ist der detaillierte Inhalt vonWarum verwendet C dieselbe Syntax (T&&) für Weiterleitungsreferenzen und Rvalue-Referenzen?. 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