Das Konzept der Weiterleitungsreferenzen und R-Wert-Referenzen mit derselben Syntax in C hat bei Entwicklern Fragen aufgeworfen. Lassen Sie uns die Gründe für diese Entscheidung genauer untersuchen und die Syntax im Detail untersuchen.
Weiterleitungsreferenzen, gekennzeichnet durch T&&, und R-Wert-Referenzen, ebenfalls gekennzeichnet durch T&&, binden nicht an L-Werte. Allerdings können universelle Referenzen, die durch dieselbe Syntax gekennzeichnet sind, sowohl an R-Werte als auch an L-Werte gebunden werden. Dieses duale Verhalten mag verwirrend erscheinen, also klären wir den zugrunde liegenden Mechanismus.
Universelle Referenzen wie T&& besitzen die Fähigkeit, T entweder als „Objekttyp“ oder als „Referenztyp“ abzuleiten. Wenn ein R-Wert übergeben wird, kann T als Objekttyp abgeleitet werden, was zu einem Funktionsparameter vom Typ T&& führt. Wenn alternativ ein l-Wert übergeben wird, leitet T als Referenztyp ab und kollabiert effektiv zu T&, basierend auf Regeln zum Reduzieren von Referenzen.
Dieses Verhalten lässt sich nahtlos in die Ableitung von Vorlagenargumenten und die Regeln zum Reduzieren von Referenzen integrieren, mit der kleinen Ausnahme, dass a Der Vorlagenparameter kann nun als Referenztyp abgeleitet werden. Die Syntax für universelle Referenzen richtet sich nach diesem Ableitungsmechanismus und ermöglicht ein konsistentes Typsystem über Vorlagen und den Rest der Sprache hinweg.
Das C-Komitee prüfte sorgfältig alternative Syntaxen, entschied sich aber letztendlich dagegen. Vorschläge wie T&&&&&&, T*&, T@ und T&42 wurden in Betracht gezogen, aber als unnötig und potenziell verwirrender erachtet.
Die Syntax T&& für universelle Referenzen stellt die Kompatibilität mit den Regeln zum Zusammenklappen von Referenzen sicher und sorgt für eine syntaktische Syntax konsistente Art und Weise, mit Objekttypen und Referenztypen umzugehen. Durch die Verwendung derselben Syntax für die Weiterleitung von Referenzen und R-Wert-Referenzen bleibt die Sprache einfach und minimiert Verwirrung.
Das obige ist der detaillierte Inhalt vonWarum haben C-Weiterleitungsreferenzen und R-Wert-Referenzen dieselbe Syntax?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!