Maison >développement back-end >C++ >Pourquoi C ne peut-il pas déduire les arguments de modèle à partir des arguments de fonction par défaut ?
Déduction d'arguments de modèle à partir des arguments de fonction par défaut
En C, les programmeurs rencontrent souvent des scénarios dans lesquels ils doivent déduire des arguments de modèle à partir d'appels de fonction. Cependant, il peut y avoir des cas où cette déduction échoue, entraînant des erreurs du compilateur. Un tel cas est l'incapacité de déduire les paramètres de type de modèle à partir des arguments de fonction par défaut.
Considérez l'extrait de code suivant :
<code class="cpp">struct foo { template <typename T> void bar(int a, T b = 0.0f) { } }; int main() { foo a; a.bar(5); }</code>
Lors de la compilation de ce code, le compilateur peut générer une erreur indiquant : "Impossible de déduire l'argument modèle pour T." Pour résoudre ce problème, il faut spécifier explicitement l'argument du modèle dans l'appel de fonction, tel que a.bar
En C 03, les spécifications du langage interdisent explicitement l'utilisation d'arguments par défaut pour déduire les arguments du modèle. Selon C 03 §14.8.2/17, "Un paramètre de type de modèle ne peut pas être déduit du type d'un argument par défaut de fonction."
En C 11, le langage a introduit une nouvelle fonctionnalité qui permet de fournir des valeurs par défaut arguments de modèle pour les modèles de fonctions :
<code class="cpp">template <typename T = float> void bar(int a, T b = 0.0f) { }</code>
Cependant, l'argument de modèle par défaut est obligatoire. S'il n'est pas fourni, le compilateur interdit toujours l'utilisation de l'argument de fonction par défaut pour la déduction des arguments de modèle. C 11 §14.8.2.5/5 stipule que :
"Un paramètre de modèle utilisé dans le type de paramètre d'un paramètre de fonction qui a un argument par défaut qui est utilisé dans l'appel pour lequel la déduction d'argument est effectuée" est un contexte non déduit.
En résumé, bien que fournir des arguments par défaut pour les paramètres de fonction puisse simplifier le code, il est essentiel de comprendre les limites de la déduction des arguments de modèle dans de tels cas. Les arguments par défaut ne peuvent être utilisés pour la déduction des arguments de modèle que si un argument de modèle par défaut est explicitement fourni.
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!