c ++中void (*)()
类型是什么,如何将int转换为此类型,我在这样的函数中找到它:
function(const char*, long int, void (*)());
答案 0 :(得分:3)
它是一个函数指针:没有参数或返回值的函数的地址。
您无法将int
有意义地投射到此类型。它用于将指针传递给您自己的代码以便调用函数:
void my_callback() {/* do something */}
function("Hello", 42, my_callback);
现在该函数可以将其参数调用为函数,具有调用"回调"的效果。功能
答案 1 :(得分:1)
在C / C ++中,“最大咀嚼”规则适用于评估表达式:从起点开始,尽可能多地离开以获得有效的表达式,然后右转。
这是a --- b如何转换为(a - ) - b而不是 - ( - b)
回到你的表达
void (*)()
(*)
- >你有一个指针(*)()
- >你有一个函数指针,什么不带参数void (*)()
- >你有一个函数的指针什么不需要
参数并且不返回值所以,你的函数是在没有参数的函数的指针中传递的,它不返回任何内容。传入指针时要小心,因为它需要完全匹配(返回类型和所有)。
现在,就你为什么要这样做而言,我可以给你一个实际的例子:pthred_create
函数原型:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
void * start_routine()是胎面将运行的(就像它的主要部分),这就是创建函数需要此函数指针的原因。 一些API使用此方法以获得更大的灵活性