32

Wie behandelt C++ Funktionszeiger in Bezug auf Funktionen mit voreingestellten Parametern?Funktionszeiger mit Standardparametern in C++

Wenn ich habe:

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

Welche Funktionszeiger kann ich in Bezug verwenden, um die Funktion?

Antwort

30

Sowohl foo() als auch bar() können nur func_ptr2 zugewiesen werden.

§8.3.6/2:

Ein Standardargument ist nicht Bestandteil des Typs einer Funktion. [Beispiel:

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 Beispiel]

+1

weil Standardparameter tatsächlich vom Compiler implementiert werden? – YeenFei

+1

Weil Standardargumente für den Typ nicht berücksichtigt werden, d. H. "Int f (int)" und "int g (int = 0)" haben denselben Typ. –

+0

Das würde func_ptr1 ausschließen. Was ist mit func_ptr3? –

0

Standard-Argument kann nicht für Zeiger auf Funktionen zur Verfügung gestellt werden.