说起 C++ 的类型转换,一共有四种:
- dynamic_cast
- static_cast
- reinterpret_cast
- const_cast
其中 reinterpret_cast 是很有意思的,它可以被看作是 C 语言中强制类型转换的功能,它是一种非检查的暴力转换手段。通过它,我们可以把 指向 int* 转换为 double* 。
当然也可以用来做函数指针的转换,比如:
void FuncA(char *src, int len, int *pLen)
{
*pLen = len;
}
int _tmain(int argc, _TCHAR* argv[])
{
bool (*func_ptr) (char*, int);
func_ptr = reinterpret_cast<bool (*)(char*, int)>(&FuncA);
return 0;
}
当然了也可以用来转换 类成员函数,如:
class ObjectA
{
public:
void FuncA(char *src, int len, int *pLen)
{
*pLen = len;
}
bool FuncB(char *src, int len, int *pLen)
{
*pLen = len;
return false;
}
};
class ObjectB
{
};
int _tmain(int argc, _TCHAR* argv[])
{
bool (ObjectB::*func_ptr) (char*, int);
//ObjectA obj;
func_ptr = reinterpret_cast<bool (ObjectB::*)(char*, int)>(&ObjectA::FuncB);
return 0;
}
但是不能在普通函数和类成员函数之间转换。