2009/03/15

C++ reinterpret_cast

说起 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;
}

但是不能在普通函数和类成员函数之间转换。

发表评论