请考虑以下代码:
int f(int i){return i*i;};
int main() {
void* p = static_cast<void*>(&f);
return 0;
}
您可以see here编译代码。
为什么在C ++中不允许static_cast
从int (*)(int)
到void*
?
答案 0 :(得分:5)
您不能使用void*
来将函数指针转换为static_cast
,但是可以使用reinterpret_cast
来实现。
这是有条件支持的,具有实现定义的语义,只是将其强制转换回原始函数指针类型会产生相同的指针值,因此可以使用它再次调用该函数。
可能不允许使用以这种方式获得的void*
做其他任何事情,但是您需要查看编译器文档来确定这一点。 (编译器应该记录实现定义的行为,但通常做得不好或根本没有做。)
尤其是在POSIX系统和Windows上,始终支持此强制转换。