32

In che modo C++ gestisce i puntatori di funzione in relazione alle funzioni con i parametri predefiniti?Puntatori di funzione con parametri predefiniti in C++

Se ho:

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); 

Quale puntatori a funzione posso usare in relazione al quale funzione?

risposta

30

Entrambi foo() e bar() possono essere assegnati solo a func_ptr2.

§8.3.6/2:

Un argomento predefinito non è parte del tipo di una funzione. [Esempio:

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 

--end esempio]

+1

perché il parametro predefinito è effettivamente implementato dal compilatore? – YeenFei

+1

Poiché gli argomenti predefiniti non vengono presi in considerazione per il tipo, ad esempio 'int f (int)' e 'int g (int = 0)' hanno lo stesso tipo. –

+0

Ciò escluderebbe func_ptr1. Che mi dici di func_ptr3? –

0

argomento di default non può essere fornita per i puntatori a funzioni.

Problemi correlati