参考:《More effective c++》条款2
reinterpret_cast 用于函数指针类型转换:
例子:
把 int dosonething()函数指针强制转换为 void (*FuncPtr) :
#include <iostream>
typedef void(*FuncPtr)();
FuncPtr funcArray[10];
void xx() {
std::cout << "xx..." << std::endl;
}
int dosomething() {
//
std::cout << "dosomthing..." << std::endl;
return 0;
}
int main() {
funcArray[0] = reinterpret_cast<FuncPtr>(&dosomething);
funcArray[0]();
funcArray[1] = &xx;
funcArray[1]();
std::cin.get();
}
输出:
dosomthing...
xx...
注意:reinterpret_cast这个操作符的转换几乎总是与编译平台息息相关,所以reinterpret_cast不具备移植性!
某些情况下可能会导致不正确的结果,应该尽量避免函数指针转型