【发布时间】:2019-08-14 14:52:58
【问题描述】:
以下代码在 VSC++2017 中编译没有任何错误,在 gcc 7.3.0 中无法编译 (error: invalid static_cast from type ‘int(int)’ to type ‘void*’
void* p = static_cast<void*>(func))
#include <iostream>
int func(int x) { return 2 * x; }
int main() {
void* p = static_cast<void*>(func);
return 0;
}
【问题讨论】:
-
函数指针有点奇怪。我必须参加标准潜水,但我很确定 MSVC 正在为了他们自己的邪恶目的而改变标准。
-
@user4581301 不是真的 - 另一个问题是关于 C 的,并且语言可能存在差异......
-
虽然函数指针与对象指针是不同的动物,但大多数不兼容发生在
sizeof()两者不同时。如果它们相同,您通常可以安全地来回转换为void*。即便如此,虽然它可以工作,但它不是便携的,只是最好避免的事情之一。
标签: c++ function-pointers void-pointers static-cast