Mit diesem Code (gültig C++ 11) umgewandelt:Funktionsname in if-Anweisung ist auf seltsame Weise
#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;
}
Die Frage innerhalb der if
Aussage. Während typeid
mir etwas zurückgibt, das wie FbiE
aussieht (was ich glaube, ist gcc Sprache für Funktionstyp) Ich verstehe nicht, warum dieser Typ implizit in bool
konvertiert wird (nur ein Beispiel, funktioniert auch mit int
).
Warum kompiliert und bewertet die if
-Anweisung "true"?
Funktionsname verfällt zu einem Zeiger auf diese Funktion, und Zeiger sind implizit in 'bool' umwandelbar, was' false' ergibt, wenn es null ist und andernfalls 'true'. –
@ T.C. Vielen Dank! Sobald ich weiß, dass es in Zeiger konvertiert, verstehe ich, was dann passiert. – niosus
Ich gebe Ihnen einige * Zeiger *, heh. – Quentin