Указатели функций с параметрами по умолчанию в C++

Как С++ обрабатывает указатели функций по отношению к функциям с параметрами по умолчанию?

Если бы у меня был:

void foo(int i, float f = 0.0f);
void bar(int i, float f);


void (*func_ptr1)(int);
void (*func_ptr2)(int, float);
void (*func_ptr3)(int, float = 10.0f);

Какие указатели функций можно использовать по отношению к какой функции?


person user308926    schedule 05.04.2010    source источник
comment
C++ не допускает аргументов по умолчанию в объявлениях указателей функций. Ваша декларация func_ptr3 составлена ​​неправильно. Так что тут нечего обрабатывать.   -  person AnT    schedule 07.04.2021


Ответы (2)


И foo(), и bar() могут быть назначены только func_ptr2.

§8.3.6/2:

Аргумент по умолчанию не является частью типа функции. [Пример:

int f(int = 0);

void h() {
    int j = f(1);
    int k = f(); // OK, means f(0)
}

int (*p1)(int) = &f; 
int (*p2)() = &f; // error: type mismatch

--конец примера]

person Georg Fritzsche    schedule 05.04.2010
comment
потому что параметр по умолчанию фактически реализован компилятором? - person YeenFei; 05.04.2010
comment
Потому что аргументы по умолчанию не учитываются для типа, т.е. int f(int) и int g(int=0) имеют один и тот же тип. - person Georg Fritzsche; 05.04.2010
comment
Это исключило бы func_ptr1. А как насчет func_ptr3? - person Daniel Daranas; 05.04.2010
comment
Это также исключает № 3 — аргументы по умолчанию разрешены только для объявлений функций. - person Georg Fritzsche; 06.04.2010

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

person Dixit Singla    schedule 02.08.2013