Warum haben universelle Referenzen dieselbe Syntax (T&&) wie R-Wert-Referenzen? ? Ist das nicht verwirrend?
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.
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!