2011-08-30 3 views
5

Perché l'assegnazione senza '&' è compilata nel seguente codice? Ho compilato il codice con GCC 3.4.6. È giusto assegnare senza &, o questa è una "caratteristica" di GCC?pointer to function assignment

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

risposta

13

Questo è perfettamente ok. Entrambe le affermazioni sono totalmente equivalenti. La funzione lvalue viene convertita in un puntatore per funzionare attraverso una conversione standard. §4.3/1:

Un lvalue del tipo di funzione T può essere convertito in un valore di tipo "puntatore su T." Il risultato è un puntatore alla funzione.

+0

Ah grazie, stavo faticando a trovare un riferimento. –