回调函数:void(* func)(int)和void(func)(int)之间的区别

时间:2014-09-20 21:38:07

标签: c++ c function callback

所以让我们说我有一个功能:

void foo (int i){
    cout << "argument is: " << i << endl;
}

我将此功能传递给:

void function1 (void(callback)(int), int arg){
    callback(arg);
}

void function2 (void(*callback)(int), int arg){
    callback(arg);
}

这两个功能是否相同?两者之间有什么区别吗?

2 个答案:

答案 0 :(得分:3)

规则是在函数的参数列表中,声明具有函数类型的参数被调整为具有指向函数类型的指针(类似地,并且可能更为人熟知,声明具有类型“{of {{{ 1}}“被调整为具有类型”指针T“。声明符中的冗余括号是允许的,但是被忽略。

因此,在

T

这三个函数的第一个参数具有完全相同的类型 - “指向void function1 (void(callback)(int), int arg); void function2 (void (*callback)(int), int arg); void function3 (void callback(int), int arg); 返回(int)的函数的指针”。

答案 1 :(得分:1)

他们是完全相同的。具有函数类型的参数将转换为指向函数类型的指针。