Maison > développement back-end > C++ > le corps du texte

Pourquoi C ne peut-il pas déduire les arguments de modèle à partir des arguments de fonction par défaut ?

DDD
Libérer: 2024-11-05 09:14:02
original
943 Les gens l'ont consulté

Why Can't C   Deduce Template Arguments from Default Function Arguments?

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>
Copier après la connexion

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(5). Mais pourquoi le compilateur ne parvient-il pas à déduire le type en premier lieu ?

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!