2012-03-09 6 views
1

Dans les paramètres d'une fonction, je veux passer un argument par défaut qui est un modèle de fonction. Ce que je suis en train de déchiffrer est la différence entre (* cmp) ou (cmp) dans la fonction ci-dessous:différence entre les paramètres de la fonction

template <typename Type> 
int Foo(some var, int (*cmp)(Type one, Type two) = FunctTemplate) { ... 

Je suis habitué à voir le * comme une déclaration de pointeur ... Est-ce un pointeur la fonction FunctTemplate? Pourquoi le programme voit-il fonctionner indépendamment de la façon dont je l'écris (astrik ou no astrik)?

Répondre

3

Les types ne sont pas identiques, mais il n'y a pas de différence lorsqu'ils sont utilisés en tant que type de paramètre dans une déclaration de fonction.

En int (*cmp)(Type, Type), cmp a un type pointeur-à-fonction (ou un type "pointeur de fonction").

En int (cmp)(Type, Type), cmp a un type de fonction (c'est-à-dire, ce n'est pas du tout un type de pointeur). Cependant, C et C++ ont tous deux une règle selon laquelle tout paramètre qui a un type de fonction est implicitement converti en le type pointeur de fonction correspondant, tout comme tout paramètre qui a un type tableau est implicitement converti en le type pointeur correspondant.

Questions connexes