Maison >développement back-end >C++ >Comment la résolution de surcharge C gère-t-elle les paramètres de référence Value, Rvalue et Const Lvalue ?

Comment la résolution de surcharge C gère-t-elle les paramètres de référence Value, Rvalue et Const Lvalue ?

DDD
DDDoriginal
2024-12-01 09:40:12362parcourir

How Does C   Overload Resolution Handle Value, Rvalue Reference, and Const Lvalue Reference Parameters?

Résolution de surcharge : valeur, référence Rvalue et référence Const Lvalue

En résolution de surcharge, il n'est pas rare de rencontrer des appels ambigus lorsque plusieurs les fonctions viables partagent le même type de paramètre. Un cas particulièrement intrigant se produit lorsqu'une surcharge se produit entre une valeur, une référence rvalue et une référence const lvalue.

Ambiguïté et résolution

Étant donné les fonctions :

int f( int );
int f( int && );
int f( int const & );

l'appel int q = f( 3 ); devient ambigu. Clang et GCC préfèrent la référence rvalue à la référence lvalue lorsque f( int ) est supprimé. Cependant, la suppression de l'une ou l'autre surcharge de référence entraîne une ambiguïté avec f( int).

Règles de résolution de surcharge

La résolution de surcharge est basée sur la recherche d'une « meilleure correspondance » unique pour le paramètre. En l'absence de règles spéciales, les trois initialisations (valeur, référence rvalue et référence const lvalue) seraient indiscernables.

Cependant, puisqu'une référence rvalue se lie à une rvalue et qu'une référence const lvalue ne le fait pas, le La référence rvalue est considérée comme une meilleure correspondance en raison de la règle suivante dans 13.3.3.2 :

S1 binds an rvalue reference to an rvalue and S2 binds an lvalue reference.

Cette règle ne s'applique pas lorsqu'on l'initialisation n'est pas une liaison de référence.

Proposition de futures normes

L'auteur propose qu'un int && soit préféré à int dans les futures normes car il force une liaison d'initialisation à un initialiseur, contrairement au type d'objet sans contrainte. Cela pourrait servir d'alternative au pur transfert par valeur tout en évitant les frais généraux liés au déménagement.

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