Maison > Article > développement back-end > Quelle est la différence entre les références universelles et les références de transfert en C ?
Références universelles et de transfert : une explication complète
En C, les programmeurs utilisent souvent des références pour transmettre des données aux fonctions. Lors de la définition d'un paramètre de fonction en tant que référence rvalue (par exemple, void f(int && i)), l'argument de fonction sera lié à une référence rvalue. À l’inverse, un paramètre de fonction modèle déclaré comme T && t peut être lié à une référence rvalue ou lvalue.
Ces deux types de paramètres ont suscité des discussions, certains se référant à cette dernière comme une « référence universelle » et d'autres comme une « référence de transfert ».
Référence universelle vs référence de transfert
Le terme « référence universelle » a été inventé à l'origine par Scott Meyers pour décrire la capacité d'une référence rvalue à un paramètre de modèle cv non qualifié à se déduire comme une valeur ou une référence lvalue. Cependant, C 17 a introduit un nouveau terme : « référence de transfert ».
Selon la norme C, une « référence de transfert » est définie comme une référence rvalue à un paramètre de modèle cv non qualifié. Lorsque l'argument de la fonction est une lvalue, le type « référence lvalue à A » est utilisé pour la déduction de type.
Par conséquent, les références universelles et les références de transfert sont synonymes, et le terme préféré actuel dans la norme C est « forwarding référence."
Références de transfert et std::forward()
La fonction std::forward() transmet son argument à une autre fonction ou à un objet fonction. Il est souvent utilisé pour préserver le type d'un argument, en particulier lorsque l'argument est une référence universelle. Cependant, l'utilisation de std::forward() n'est pas obligatoire pour qu'un paramètre soit considéré comme une référence de transfert.
Conclusion
Les références de transfert offrent un moyen flexible de gérer paramètres de fonction. Ils peuvent se lier à des références rvalue ou lvalue, offrant commodité et flexibilité dans le développement de code. Comprendre la distinction entre les références de transfert et les références universelles est essentiel pour écrire du code C efficace et maintenable.
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!