Maison  >  Article  >  développement back-end  >  Pourquoi dois-je toujours spécifier des arguments de modèle lors de l'utilisation d'arguments de modèle par défaut en C ?

Pourquoi dois-je toujours spécifier des arguments de modèle lors de l'utilisation d'arguments de modèle par défaut en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-04 17:21:01244parcourir

Why Do I Still Need to Specify Template Arguments When Using Default Template Arguments in C  ?

Comprendre l'utilisation des arguments de modèle par défaut en C

Question :

Malgré la possibilité de définir un modèle de classe avec arguments de modèle par défaut, comme indiqué ci-dessous :

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

Pourquoi est-il nécessaire de spécifier des arguments de modèle lorsque instancier la classe dans l'exemple suivant ?

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

Réponse :

Contrairement à ce que suggère la question, il n'est pas nécessaire de spécifier explicitement les arguments du modèle lors de la définition d'un modèle de classe avec les arguments de modèle par défaut. À partir de C 17, le code suivant est valide :

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

Avant C 17, cependant, la syntaxe suivante était requise :

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

Cela signifie que les arguments du modèle doivent être présents même s'ils sont vides. Ce comportement est analogue à l'appel d'une fonction avec un seul argument par défaut, où foo() et foo sans arguments sont des expressions valides, mais seule la première appellera la fonction.

En introduisant les arguments de modèle par défaut, C 11 a facilité le travail avec les modèles de classe en fournissant un moyen de définir des valeurs par défaut pour les paramètres du modèle. De plus, comme le démontre le changement de comportement entre C 11 et C 17, cette syntaxe a évolué au fil du temps pour améliorer la convivialité.

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