Maison >développement back-end >C++ >Pourquoi la résolution de surcharge est-elle ambiguë entre `int`, `int&&` et `const int&` en C ?
Ambiguïté de résolution de surcharge en présence de surcharge de valeur, de référence Rvalue et de référence Const Lvalue
En C, lorsqu'un appel de fonction implique plusieurs surcharges, la résolution de surcharge détermine la meilleure correspondance sur la base d'un ordre partiel strict. Cependant, certains scénarios introduisent une ambiguïté, comme en témoigne le code suivant :
int f( int ); int f( int && ); int f( int const & ); int q = f( 3 );
Bien que cet appel soit ambigu, la suppression de f( int ) amène Clang et GCC à favoriser la surcharge de référence rvalue f( int && ) sur la référence lvalue f( int const & ). 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
Dans la résolution de surcharge, une initialisation de paramètre dans un appel de fonction doit être une meilleure correspondance que les deux autres initialisations. Lorsque l'on compare deux initialisations, l'une peut être meilleure, impossible à distinguer ou pire. Dans le scénario donné, les règles spéciales pour la liaison de référence directe rendent int && meilleur que const int &, mais ni l'un ni l'autre n'est meilleur ou pire que int. Par conséquent, aucune meilleure correspondance n'existe.
Règle spéciale pour les références Rvalue
Curieusement, la règle qui favorise les références rvalue par rapport aux références lvalue ne s'applique que lorsque les deux initialisations impliquent des liaisons de référence. Cependant, lorsqu'une initialisation est une liaison sans référence, comme dans le cas de int, cette règle ne s'applique pas.
Extensions futures possibles
La proposition de prioriser int && over int dans la résolution de surcharge vise à fournir un mécanisme plus efficace pour gérer la propriété. En liant la référence à un initialiseur, cette approche garantit que l'objet appartient et peut être manipulé directement, éliminant potentiellement la surcharge de copie.
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!