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 C utilise-t-il la même syntaxe pour les références rvalue et les références universelles ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-05 14:47:02984parcourir

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>

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>

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!

Déclaration:
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