Maison >développement back-end >C++ >Pourquoi une surcharge de fonction « const char* » prévaut-elle sur une fonction de modèle « const char (&)[N] » ?
Question :
Pourquoi une fonction avec un paramètre de type const char* a priorité sur un modèle de fonction avec un paramètre de type const char (&s)[N] lorsque les deux sont également applicable ?
Cause fondamentale :
L'ambiguïté vient du coût relatif des conversions. La résolution des surcharges favorise les fonctions qui nécessitent moins d'opérations de conversion. Un tableau est en fait un pointeur vers son premier élément, ce qui implique que la conversion tableau en pointeur coûte moins cher que la déclaration d'un modèle de fonction basé sur un tableau.
Explication standard :
Selon le standard C ([over.match.best]/(1.3), (1.6)) :
Dans ce cas :
Solution de contournement possible :
Pour donner la priorité à la fonction basée sur un modèle, définissez la deuxième surcharge également comme modèle de fonction :
template <typename T> auto foo(T s) -> std::enable_if_t<std::is_convertible<T, char const*>{}> { std::cout << "raw, size=" << std::strlen(s) << std::endl; }
Cet ordre partiel garantit que la fonction basée sur un modèle est sélectionnée le cas échéant.
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!