Maison > développement back-end > C++ > le corps du texte

Pourquoi C utilise-t-il la même syntaxe pour les références rvalue et les références universelles ?

Linda Hamilton
Libérer: 2024-11-05 14:47:02
original
1047 Les gens l'ont consulté

Why does C   use the same syntax for rvalue references and universal references?

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&amp;&amp; a);

int i = 42;
foo(i); // error</code>
Copier après la connexion

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&amp;&amp; b);

bar(i); // okay</code>
Copier après la connexion

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 :

  • Elles créeraient une incohérence au sein du système de types.
  • Elles introduiraient une complexité inutile et un potentiel de confusion.
  • Ils violeraient le principe de la moindre surprise, car la syntaxe choisie s'aligne bien avec les règles de déduction et d'effondrement.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal