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

所以让我说我有一个function:

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

我将此function传递给:

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

这两个function是否相同? 这两者有什么区别吗?

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

因此,在

 void function1 (void(callback)(int), int arg); void function2 (void (*callback)(int), int arg); void function3 (void callback(int), int arg); 

这三个函数的第一个参数具有完全相同的类型 – “指向函数(int)返回void指针”。

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