Con questo codice (valido C++ 11):nome della funzione if è convertito in uno strano modo
#include <stdio.h>
#include <typeinfo>
bool my_awesome_func(int param) {
return (param > 1);
}
int main(int argc, char const *argv[]) {
fprintf(stderr, "type of my_awesome_func: %s\n",
typeid(my_awesome_func).name());
if (my_awesome_func) {
fprintf(stderr, "WHAT???\n");
}
return 0;
}
La questione è all'interno della dichiarazione if
. Mentre typeid
mi restituisce qualcosa che assomiglia a FbiE
(che penso sia lingua gcc per tipo di funzione) Non capisco perché questo tipo viene convertito implicitamente in bool
(solo un esempio, funziona anche con int
).
Perché l'istruzione if
viene compilata e valutata true?
Il nome della funzione decade in un puntatore a tale funzione e i puntatori sono implicitamente convertibili in 'bool', restituendo' false' se è null e 'true' in caso contrario. –
@ T.C. Grazie! Non appena so che si converte in puntatori, capisco cosa succede allora. – niosus
Dandoti alcuni * puntatori *, heh. – Quentin