Maison > développement back-end > C++ > 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
Libérer: 2024-11-04 04:56:30
original
877 Les gens l'ont consulté

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

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

<code class="cpp">Foo me;</code>
Copier après la connexion
Copier après la connexion

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

<code class="cpp">Foo<int> me;</code>
Copier après la connexion

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

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

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!

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