为什么C++中不允许从int(*)(int)到void*的static_cast



请考虑以下代码:

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将函数指针强制转换为void*,但可以使用reinterpret_cast

这是有条件支持的实现定义了语义,只是强制转换回原始函数指针类型会产生相同的指针值,以便可以再次使用它来调用函数。

可能您不允许对以这种方式获得的void*执行任何其他操作,但您需要查看编译器文档来确定这一点。(编译器应该记录实现定义的行为,但它通常做得不好或根本不好。(

特别是在POSIX系统和Windows上,始终支持此强制转换。

相关内容

  • 没有找到相关文章

最新更新