![](/img/trans.png)
[英]cannot fake a managed callback from c++ (cannot cast from 'void (GenFlowcacheTests::*)(int)' to 'void(*)(int)' via static_cast)
[英]Why is static_cast from int (*)(int) to void* not allowed in C++?
请考虑以下代码:
int f(int i){return i*i;};
int main() {
void* p = static_cast<void*>(&f);
return 0;
}
正如您在此处看到的,代码无法编译。 为什么在 C++ 中不允许从int (*)(int)
到void*
static_cast
?
您不能使用static_cast
将函数指针static_cast
为void*
,但您可以使用reinterpret_cast
这样做。
这是由实现定义的语义有条件地支持的,除了转换回原始函数指针类型会产生相同的指针值,以便可以再次使用它来调用函数。
可能您不允许对以这种方式获得的void*
做任何其他事情,但是您需要查看编译器文档以确定这一点。 (编译器应该记录实现定义的行为,但它通常做得不好或根本没有完成。)
特别是在 POSIX 系统和 Windows 上,始终支持此转换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.