Maison >développement back-end >C++ >Pourquoi la résolution de surcharge est-elle ambiguë entre « int », « int&& » et « const int& » ?
Considérez le scénario suivant :
int f( int ); int f( int && ); int f( int const & ); int q = f( 3 );
Appel des résultats f(3) dans une résolution de surcharge ambiguë. L'élimination de f( int ) amène Clang et GCC à donner la priorité à la référence rvalue par rapport à la référence lvalue. Cependant, la suppression de l'une ou l'autre surcharge de référence entraîne une ambiguïté avec f( int ).
La résolution de surcharge suit généralement un ordre partiel strict. Cependant, dans ce cas, int apparaît comme équivalent à deux concepts qui ne sont pas équivalents l’un à l’autre. Les règles spécifiques régissant cette situation sont les suivantes :
13.3.3.2 de la norme C fournit une règle spéciale pour la liaison de référence directe :
Si S1 et S2 sont des liaisons de référence (8.5.3) et aucune ne fait référence à un paramètre d'objet implicite d'une fonction membre non statique déclarée sans qualificatif de référence, et S1 lie une référence rvalue à une rvalue et S2 lie une référence lvalue, puis S1 correspond mieux que S2.
Cette règle ne s'applique pas lorsque l'une des initialisations n'est pas une liaison de référence.
L'idée de faire en sorte que les liaisons de référence correspondent mieux que les liaisons sans référence a été proposée. Pour lancer des discussions sur ce sujet, il est recommandé de publier ces propositions sur le forum ISO C Future Proposals.
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!