z tym kodem (ważny C++ 11):nazwa funkcji w instrukcji if jest przekształcany w dziwny sposób
#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;
}
Pytanie jest w środku zestawienia if
. Podczas gdy typeid
zwraca mi coś, co wygląda na FbiE
(co moim zdaniem jest językiem gcc dla typu funkcji), nie rozumiem, dlaczego ten typ jest niejawnie przekształcany w bool
(tylko przykład, działa również z int
).
Dlaczego instrukcja if
kompiluje i ocenia true?
Nazwa funkcji rozpada się na wskaźnik do tej funkcji, a wskaźniki są niejawnie wymienialne na 'bool', co daje" fałsz ", jeśli jest zero i" prawda "w przeciwnym razie. –
@ T.C. dzięki! Jak tylko wiem, że zamienia się w wskaźniki, rozumiem, co się wtedy dzieje. – niosus
Dając ci * wskazówki *, heh. – Quentin