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

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

DDD
DDDoriginal
2024-11-12 13:08:02603parcourir

What's the Difference Between Universal and Forwarding References in C  ?

Démystifier les références universelles et de transfert

En C , la distinction entre les références universelles et de transfert a fait l'objet de débats. Pour clarifier cette confusion, nous explorons leur relation et leurs définitions.

L'essence des références universelles

Historiquement, les références universelles ont été introduites pour décrire les paramètres de modèle qui pouvaient accepter des références rvalue. aux types cv non qualifiés. Cela a permis au modèle de déduire soit une valeur, soit une référence lvalue en fonction de l'argument passé.

Références de transfert définies

Le terme « référence de transfert » a été introduit dans le C (N4164) pour remédier à l'absence d'un terme spécifique pour ce concept dans C 11. Une référence de transfert est formellement définie comme une référence rvalue à un paramètre de modèle cv non qualifié. Si l'argument est une lvalue, la "référence lvalue à A" est remplacée par le type "A" lors de la déduction de type.

Universalité et transmission : même pièce, différentes faces

Les termes « référence universelle » et « référence de transmission » décrivent la même notion. Ils font tous deux référence à des références rvalue à des paramètres de modèle cv non qualifiés qui permettent de déduire soit une valeur, soit une référence lvalue. Le terme standard C actuel est « référence de transfert », qui est considéré comme un descripteur plus précis et plus concis.

La non-pertinence de std::forward

Il est crucial de notez que l'utilisation de std::forward dans un corps de fonction n'est pas liée au concept de références de transfert. Les références de transfert font uniquement référence à la déduction de types de modèles basée sur des références rvalue à des paramètres cv non qualifiés. Leur comportement est indépendant du fait que std::forward soit invoqué ou non par la suite.

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