有了這個代碼(有效的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
語句編譯並評估爲true?
函數名稱衰減爲指向該函數的指針,並且指針可隱式轉換爲「bool」,如果爲空,則產生「false」,否則產生「true」。 –
@ T.C。謝謝!只要我知道它轉換爲指針,我就會明白髮生了什麼。 – niosus
給你一些*指針*,嘿。 – Quentin