为什么在C ++中不允许将static_cast从int(*)(int)转换为void *?

问题描述 投票:-1回答:1

请考虑以下代码:

int f(int i){return i*i;};

int main() {

    void* p = static_cast<void*>(&f);

    return 0;
}

您可以see here不会编译代码。为什么在C ++中不允许从static_castint (*)(int)void*

c++ casting void-pointers
1个回答
0
投票

无法使用void*将函数指针转换为static_cast,但可以使用reinterpret_cast进行转换。

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

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

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


-2
投票

因为void*可用于存储指向对象的指针,而不是函数指针。

© www.soinside.com 2019 - 2024. All rights reserved.