разница между параметрами функции - PullRequest
1 голос
/ 09 марта 2012

В параметрах функции я хочу передать аргумент по умолчанию, который является шаблоном функции.То, что я пытаюсь расшифровать, это разница между (* cmp) или (cmp) в функции ниже:

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

Я привык видеть * как объявление указателя ... Этоуказатель на функцию FunctTemplate?Почему программа работает независимо от того, как я ее пишу (астрик или нет астрик)?

1 Ответ

3 голосов
/ 09 марта 2012

Типы не совпадают, но нет разницы, когда они используются в качестве типа параметра в объявлении функции.

В int (*cmp)(Type, Type), cmp имеет тип указателя на функцию (или тип "указатель на функцию").

В int (cmp)(Type, Type), cmp имеет тип функции (т. е. вообще не является указателем).

Однако C и C ++у обоих есть правило, что любой параметр, имеющий тип функции, неявно преобразуется в соответствующий тип указателя на функцию, так же как любой параметр, имеющий тип массива, неявно преобразуется в соответствующий тип указателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...