gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:18:05 25 4
gpt4 key购买 nike

请考虑以下代码:

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

int main() {

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

return 0;
}

尽你所能see here该代码无法编译。为什么 C++ 中不允许将 static_castint (*)(int) 转换为 void*

最佳答案

您无法使用 static_cast 将函数指针强制转换为 void*,但可以使用 reinterpret_cast 实现此目的。

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

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

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

关于c++ - 为什么 C++ 中不允许从 int (*)(int) 到 void* 的 static_cast ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60662298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com