回调函数: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
指针”。
它们完全相同。 具有函数类型的参数被转换为指向函数类型的指针。