32

W jaki sposób C++ obsługuje wskaźniki funkcji w odniesieniu do funkcji z parametrami domyślnymi?Wskaźniki funkcji z domyślnymi parametrami w C++

Jeśli mam:

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

Które wskaźniki funkcji można używać w odniesieniu do których funkcja?

Odpowiedz

30

Zarówno foo(), jak i bar() można przypisać tylko do func_ptr2.

§8.3.6/2:

domyślny argument nie jest częścią rodzaju funkcji. [przykład:

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 przykład]

+1

ponieważ parametr domyślny jest faktycznie zaimplementowany przez kompilator? – YeenFei

+1

Ponieważ domyślne argumenty nie są brane pod uwagę dla typu, tj. "Int f (int)" i "int g (int = 0)" mają ten sam typ. –

+0

To wyklucza func_ptr1. A co z func_ptr3? –

0

domyślny argument nie może być przewidziane wskaźniki do funkcji.