假设我有一个功能
void myFun(int*) Run Code Online (Sandbox Code Playgroud) 在C++中,以下是什么意思
( void(*)(void*) )&myFun
Run Code Online (Sandbox Code Playgroud)
它是一个指向函数的指针,它接受一个(void*)参数并返回一个void?允许这种类型的演员吗?
就目前而言,我很确定这是不允许的.
如果你删除初始周围的parens void得到:
void (*)(void *)
Run Code Online (Sandbox Code Playgroud)
...然后是的,它是一个指向函数的指针,该函数返回void并将指向void的指针作为唯一的参数.要转换为该类型,您需要在括号中包含该类型的整个名称,因此您将得到:(void (*)(void *)),您将按照所投射的值来执行:获取:
(void (*)(void *))&myFun;
Run Code Online (Sandbox Code Playgroud)
至少如果内存服务,是的,这是允许的,虽然通过结果取消引用指针(即,试图调用它指向的函数)可能会给出未定义的行为.特别是,当/如果你调用函数时,它期望一个指向int的指针,并且(可能)将它指向的任何东西用作int.但是,如果它指出的内容没有正确对齐以用作int,则它不太可能按预期工作.