Maison > développement back-end > C++ > Pourquoi les paramètres de type de modèle ne peuvent-ils pas être déduits des arguments de fonction par défaut en C ?

Pourquoi les paramètres de type de modèle ne peuvent-ils pas être déduits des arguments de fonction par défaut en C ?

Linda Hamilton
Libérer: 2024-11-05 00:24:02
original
692 Les gens l'ont consulté

Why Can't Template Type Parameters Be Deduced from Default Function Arguments in C  ?

Pourquoi les paramètres de type de modèle ne peuvent pas être déduits des arguments de fonction par défaut

En C, une idée fausse courante est que le compilateur peut déduire les paramètres de type de modèle à partir des arguments de fonction par défaut. Cependant, ce n'est pas le cas.

Lorsqu'il rencontre le 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);  // Error: could not deduce template argument for T
}</code>
Copier après la connexion

le compilateur ne parvient pas à déduire le type T de l'argument par défaut 0.0f. Au lieu de cela, il nécessite une spécification explicite, comme dans a.bar(5).

Interdiction C 03

En C 03, la spécification du langage interdit explicitement l'utilisation Arguments de fonction par défaut pour la déduction des arguments de modèle (C 03 §14.8.2/17) :

A template type-parameter cannot be deduced from the type of a function default argument.
Copier après la connexion

Arguments de modèle par défaut C 11

En C 11, une solution de contournement a émergé : introduction des arguments de modèle par défaut. En modifiant le code comme suit :

<code class="cpp">template <typename T = float>
void bar(int a, T b = 0.0f) { }</code>
Copier après la connexion

le paramètre de modèle par défaut T est fourni. Cependant, il convient de noter qu'avoir un argument de modèle par défaut n'allège pas la restriction sur les arguments de fonction par défaut.

Selon C 11 14.8.2.5/5, les arguments de fonction par défaut sont considérés comme des « contextes non déduits » dans le processus de déduction des arguments du modèle. Cela signifie que le compilateur ne peut pas utiliser la valeur par défaut de l'argument de fonction pour déduire le paramètre de type de modèle.

Conclusion

Bien que les arguments de fonction par défaut soient pratiques, les paramètres de type de modèle il ne faut pas en déduire. Dans les cas où les valeurs par défaut sont nécessaires, les arguments de modèle par défaut offrent une solution plus portable et plus flexible.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal