Maison >développement back-end >C++ >Pourquoi \'Foo me;\' ne fonctionne-t-il pas avec les arguments de modèle par défaut dans C 11 ?

Pourquoi \'Foo me;\' ne fonctionne-t-il pas avec les arguments de modèle par défaut dans C 11 ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-04 14:02:02390parcourir

Why Does

Surmonter la spécification d'arguments explicites pour les modèles de classe avec des arguments de modèle par défaut

C 11 a introduit les arguments de modèle par défaut, un concept qui a initialement suscité la confusion. Cet article approfondit ce sujet et explique pourquoi une instance d'un modèle de classe avec des arguments de modèle par défaut, tels que "Foo me ;", n'est pas valide dans main.

Considérez le modèle de classe suivant avec un argument de modèle par défaut de int :

template <typename T = int>
class Foo {};

Malgré la présence de l'argument de modèle par défaut, le code "Foo me;" dans main entraîne une erreur de compilation. En effet, des crochets angulaires vides, comme dans "Foo<> me;", sont nécessaires pour spécifier explicitement l'argument du modèle par défaut.

La raison derrière cette exigence est la nécessité d'une syntaxe cohérente avec les appels de fonction. En C , une fonction avec un argument par défaut nécessite que la syntaxe de l'argument soit présente, même si la valeur par défaut est utilisée. Cette règle s'étend aux modèles de classe avec des arguments de modèle par défaut, garantissant la cohérence de la syntaxe du langage.

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