Maison > Article > développement back-end > Pourquoi C utilise-t-il la même syntaxe pour les références rvalue et les références universelles ?
Pourquoi Rvalue et les références universelles partagent la syntaxe
En C , les références rvalue et universelles partagent la même syntaxe, notée T&& . Ce choix a soulevé des questions sur une confusion potentielle et la possibilité de syntaxes alternatives.
Références Rvalue
Les références Rvalue sont utilisées pour désigner une référence non modifiable à une rvalue ( expression de la bonne valeur). Ils empêchent les lvalues (valeurs de gauche) d'être liées à la référence, comme illustré ci-dessous :
<code class="cpp">void foo(int&& a); int i = 42; foo(i); // error</code>
Références universelles
En revanche, les références universelles peuvent se lier à à la fois les rvalues et les lvalues. Ceci est réalisé grâce à la déduction des arguments de modèle et aux règles de réduction des références. Considérez les exemples suivants :
<code class="cpp">template<typename T> void bar(T&& b); bar(i); // okay</code>
Dans la fonction bar, le paramètre de modèle T peut être déduit comme int lorsqu'une rvalue est transmise, ce qui donne un paramètre de fonction de int&&. De même, lorsqu'une lvalue est transmise, T peut être déduit comme int&, ce qui donne un paramètre de fonction de int&.
Raisons de la syntaxe partagée
La justification du partage la même syntaxe pour les références rvalue et universelles réside dans le fait qu'elles suivent les mêmes règles de déduction des arguments et de réduction des références. Cette cohérence permet une intégration transparente des références de transfert (transfert parfait) dans les modèles.
Si des syntaxes alternatives étaient adoptées, telles que T&&&, T&* ou T@, cela introduirait une complexité supplémentaire. dans la langue. De plus, ces notations alternatives nécessiteraient l'introduction de nouvelles règles de grammaire qui présentent leurs propres défis et un potentiel d'ambiguïté.
Rejet des syntaxes alternatives
Le comité C a considéré des notations alternatives syntaxes mais les a finalement rejetées pour les raisons suivantes :
En résumé, la syntaxe partagée entre rvalue et les références universelles fournit une approche propre et cohérente pour la gestion références de transfert et sémantique rvalue en C . La cohérence avec les règles de réduction des références élimine le besoin d'une syntaxe séparée et maintient l'intégrité du système de types du langage.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!