Pourquoi les compilateurs ne peuvent-ils pas déduire les paramètres de type de modèle à partir des arguments de fonction par défaut ?
Malgré l'hypothèse apparemment logique, les compilateurs C ne peuvent pas automatiquement déduire un modèle tapez les paramètres à partir des arguments de fonction par défaut. Cela est vrai aussi bien en C 03 qu'en C 11, pour des raisons distinctes.
En C 03, l'incapacité du compilateur provient de spécifications explicites du langage (§14.8.2/17) : "Un paramètre de type de modèle ne peut pas être déduit du type d'argument par défaut d'une fonction."
En C 11, s'il est possible de spécifier un argument de modèle par défaut, il doit être fourni explicitement. L'argument de fonction par défaut lui-même reste inutilisable pour la déduction d'argument de modèle :
<code class="cpp">void bar(int a, T b = 0.0f) { } // C++11</code>
La norme C 11 (14.8.2.5/5) définit des contextes non déduits, qui incluent :
En conséquence, la disposition explicite des arguments de modèle par défaut sont souvent nécessaires pour éviter les erreurs de compilation.
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!