Maison  >  Article  >  développement back-end  >  Pourquoi dois-je encore spécifier des arguments pour un modèle de classe avec des arguments par défaut ?

Pourquoi dois-je encore spécifier des arguments pour un modèle de classe avec des arguments par défaut ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-04 04:56:30867parcourir

Why Do I Still Need to Specify Arguments for a Class Template with Default Arguments?

Comprendre les arguments de modèle par défaut en C : éviter les arguments spécifiés

En programmation C, il est possible de déclarer un modèle de classe avec des arguments de modèle par défaut . Cependant, il peut être déroutant de comprendre pourquoi la spécification d'arguments est toujours requise dans certains scénarios.

Question originale :

Considérez le modèle de classe suivant :

<code class="cpp">template <typename T = int>
class Foo {
};</code>

Selon la question, le code suivant devrait être autorisé :

<code class="cpp">Foo me;</code>

Cependant, à la place, le code suivant est requis :

<code class="cpp">Foo<int> me;</code>

Réponse :

Avant C 17, la spécification d'arguments dans une déclaration de modèle de classe avec des arguments par défaut était obligatoire. En d'autres termes, le code suivant était requis :

<code class="cpp">Foo<> me;</code>

Même si l'argument du modèle n'est pas explicitement fourni, les crochets angulaires vides < > doit être présent pour indiquer que l’argument par défaut est utilisé. Cette syntaxe est analogue à l'appel d'une fonction avec un seul argument par défaut, qui nécessite des parenthèses vides ().

Mise à jour C 17 :

En C 17, ce comportement a changé , et il est devenu possible d'omettre les crochets <> lors de l'utilisation de l'argument de modèle par défaut. Par conséquent, la syntaxe alternative suivante est désormais autorisée :

<code class="cpp">Foo me;</code>

Conclusion :

Comprendre l'exigence de spécifier des arguments dans les modèles de classe avec des arguments par défaut nécessite une familiarité avec l'historique évolution de C. Dans les versions antérieures à C 17, les crochets angulaires explicites <> étaient requis, tandis que C 17 a introduit une syntaxe plus pratique qui permet leur omission lors de l'utilisation de l'argument par défaut.

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!

Déclaration:
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