Heim > Artikel > Backend-Entwicklung > Warum verwendet C dieselbe Syntax für R-Wert-Referenzen und universelle Referenzen?
Warum Rvalue- und Universalreferenzen die gleiche Syntax haben
In C haben sowohl Rvalue- als auch Universalreferenzen dieselbe Syntax, die durch T&& . Diese Wahl hat Fragen zu potenzieller Verwirrung und der Möglichkeit alternativer Syntaxen aufgeworfen.
R-Wert-Referenzen
R-Wert-Referenzen werden verwendet, um eine nicht veränderbare Referenz auf einen R-Wert zu kennzeichnen ( rechter Wert) Ausdruck. Sie verhindern, dass L-Werte (Linkswerte) an die Referenz gebunden werden, wie unten dargestellt:
<code class="cpp">void foo(int&& a); int i = 42; foo(i); // error</code>
Universelle Referenzen
Im Gegensatz dazu können universelle Referenzen an binden sowohl R-Werte als auch L-Werte. Dies wird durch die Ableitung von Vorlagenargumenten und Regeln zur Referenzreduzierung erreicht. Betrachten Sie die folgenden Beispiele:
<code class="cpp">template<typename T> void bar(T&& b); bar(i); // okay</code>
In der Balkenfunktion kann der Vorlagenparameter T als int abgeleitet werden, wenn ein R-Wert übergeben wird, was zu einem Funktionsparameter von int&& führt. Wenn ein L-Wert übergeben wird, kann T ebenfalls als int& abgeleitet werden, was zu einem Funktionsparameter von int& führt.
Gründe für die gemeinsame Syntax
Der Grund für die gemeinsame Nutzung Die gleiche Syntax für R-Wert- und Universalreferenzen liegt darin, dass sie denselben Regeln für die Argumentableitung und Referenzkollabierung folgen. Diese Konsistenz ermöglicht eine nahtlose Integration von Weiterleitungsreferenzen (perfekte Weiterleitung) in Vorlagen.
Wenn alternative Syntaxen wie T&&&, T&* oder T@ übernommen würden, würde dies zu zusätzlicher Komplexität führen in die Sprache. Darüber hinaus würden diese alternativen Notationen die Einführung neuer Grammatikregeln erfordern, die eigene Herausforderungen und Potenzial für Mehrdeutigkeiten mit sich bringen.
Ablehnung alternativer Syntaxen
Das C-Komitee erwog Alternativen Syntaxen, lehnte sie jedoch letztendlich aus folgenden Gründen ab:
Zusammenfassend bietet die gemeinsame Syntax zwischen R-Wert- und Universalreferenzen einen sauberen und konsistenten Ansatz für die Handhabung Weiterleitung von Referenzen und R-Wert-Semantik in C. Durch die Konsistenz mit den Regeln zur Referenzreduzierung entfällt die Notwendigkeit einer separaten Syntax und die Integrität des Typsystems der Sprache bleibt erhalten.
Das obige ist der detaillierte Inhalt vonWarum verwendet C dieselbe Syntax für R-Wert-Referenzen und universelle Referenzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!