32

¿Cómo maneja C++ los punteros de función en relación con las funciones con parámetros predeterminados?Punteros de función con parámetros predeterminados en C++

Si tengo:

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

Los punteros de función que puede utilizar en relación con los cuales la función?

Respuesta

30

Ambos foo() y bar() solo se pueden asignar a func_ptr2.

§8.3.6/2:

Un argumento por defecto no es parte del tipo de una función. [Ejemplo:

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

+1

porque el parámetro predeterminado es realmente implementado por el compilador? – YeenFei

+1

Porque los argumentos predeterminados no se tienen en cuenta para el tipo, es decir, 'int f (int)' y 'int g (int = 0)' tienen el mismo tipo. –

+0

Eso descartaría func_ptr1. ¿Qué hay de func_ptr3? –

0

argumento predeterminado no puede ser proporcionada por los punteros a funciones.

Cuestiones relacionadas