に変換されます関数名は、このコード(有効なC++ 11)と奇妙な方法
#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;
}
質問はif
文の中にあります。 typeid
はFbiE
(私は関数型のgcc言語だと思う)のようなものを返しますが、なぜこの型が暗黙のうちにbool
に変換されているのか分かりません(ちょうど例、int
でも動作します)。
なぜif
ステートメントがコンパイルされ、真と評価されますか?
関数名はその関数へのポインタに減衰し、ポインタは暗黙のうちに 'bool'に変換され、NULLの場合は' false'を返し、それ以外の場合は 'true'を返します。 –
@ T.C。ありがとう!それがポインタに変換されることを知ったらすぐに何が起こるのか理解します。 – niosus
あなたにいくつかのポインタ*、hehを与えます。 – Quentin