nio*_*sus 6 c++ types casting function
使用此代码(有效的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;
}
Run Code Online (Sandbox Code Playgroud)
问题出在if声明中.虽然typeid返回一些看起来像的东西FbiE(我认为是函数类型的gcc语言)我不明白为什么这种类型被隐式转换成bool(只是一个例子,也适用int).
为什么if语句编译和评估为真?
您的代码中没有强制转换.演员表是一种明确的转换.我假设你在问:函数隐式转换为bool有什么作用?
答案是:函数转换为函数指针.然后bool通过隐式转换将函数指针转换为.该转换定义为产生:
false 对于空函数指针true 对于任何其他函数指针因此,在您的代码中,if (my_awesome_func)始终输入正文.(将实际函数转换为函数指针永远不会产生空指针).