使用此代码(有效的 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 有什么作用?
答案是:函数被转换为函数指针。然后通过隐式转换将函数指针转换为bool
。该转换定义为产生:
false
为空函数指针true
对于任何其他函数指针
因此在您的代码中,始终输入 if (my_awesome_func)
的主体。 (将实际函数转换为函数指针永远不会产生空指针)。
关于c++ - if 语句中的函数名以一种奇怪的方式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35003680/