我对函数指针转换做了一个有趣的测试:
typedef bool (*BFUNC)(int n);
typedef int (*IFUNC)(int n);
typedef double (*DFUNC)(int n);
void vfunc(int n)
{
n++;
}
int _tmain(int argc, _TCHAR* argv[])
{
BFUNC f = (BFUNC)vfunc;
IFUNC f2 = (IFUNC)vfunc;
DFUNC f3 = (DFUNC)vfunc;
bool bRet = f(0);
int nRet = f2(0);
double dRet = f3(0);
printf("bRet=%d, nRet=%d\n", bRet, nRet); // bRet=1, nRet=1
return 0;
}
Run Code Online (Sandbox Code Playgroud)
第一件有趣的事情是这段代码编译并运行良好。第二个有趣的事情是我实际上得到了返回值,目前似乎是1。(我用的是很老的VS2010,不知道有没有关系)
我想知道发生了什么事?
我做了一些更多的实验,似乎只要我使用这种 C 风格的显式转换,那么我就可以很自由地将一个函数指针类型转换为另一个函数指针类型,我想知道这是否有实际意义?其基本原理是什么?