2011-08-30 16 views
5

¿Por qué la asignación sin '&' se está compilando en el siguiente código? Recopilé el código con GCC 3.4.6. ¿Es correcto asignar sin &, o esta es una "característica" de GCC?puntero a la asignación de función

void func() { 
} 

int main() { 
    typedef void (*F)(); 

    F f; 
    f = &func; // the way of assigning pointer to function. 
    f = func; // this is also working. 

    (*f)(); 

    return 0; 
} 

Respuesta

13

Esto está perfectamente bien. Ambas declaraciones son totalmente equivalentes. La función lvalue se convierte en un puntero para funcionar a través de una conversión estándar. § 4.3/1:

Un lvalue de tipo de función T puede ser convertido a un valor p de tipo “puntero a T.” El resultado es un puntero a la función.

+0

Ah gracias, estaba luchando por encontrar una referencia. –

Cuestiones relacionadas