Maison >développement back-end >C++ >Quelle est la différence entre les références universelles et les références de transfert en C ?

Quelle est la différence entre les références universelles et les références de transfert en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-10 12:53:02521parcourir

What is the Difference Between Universal References and Forwarding References in C  ?

Comprendre le concept de références universelles et de transfert

En C, la distinction entre les références universelles et de transfert peut prêter à confusion. Bien que les deux termes fassent référence au même concept, leurs définitions précises ont évolué au fil du temps.

En C 11, le terme « référence universelle » a été introduit pour décrire la capacité d'un paramètre de modèle à accepter à la fois les références rvalue et lvalue. . Ceci a été réalisé en utilisant une référence rvalue à un paramètre de modèle cv non qualifié.

Cependant, avec l'introduction de C 14, un terme plus précis a été adopté : "référence de transfert". Comme défini dans la norme C 14, une référence de transfert est « une référence rvalue à un paramètre de modèle non qualifié de cv ».

Différence clé

La principale différence entre et la transmission des références réside dans leur sémantique. Bien que les deux acceptent à la fois les références rvalue et lvalue, la norme précise que pour les références de transfert, le type déduit pour un argument donné est "référence lvalue à A" si l'argument est une lvalue.

Forwarding

Il est important de noter que le terme « référence de transfert » n'implique pas l'utilisation de la fonction std::forward dans la fonction corps. L'aspect transmission se réfère uniquement au processus de déduction de type. Que la référence soit transmise ou non par la suite n'a pas d'importance.

Exemple

Considérez le modèle de fonction suivant :

template<typename A>
void foo(A&& a) {
  // Forwarding does not occur here
}

Dans cet exemple, le le type du paramètre a est une référence de transfert. Si une lvalue est passée en argument à cette fonction, le type de a sera déduit comme « référence lvalue à A ». Cependant, le corps de fonction n'effectue aucune redirection.

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