所以让我们说我有一个功能:
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);
}
这两个功能是否相同?两者之间有什么区别吗?
答案 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)
他们是完全相同的。具有函数类型的参数将转换为指向函数类型的指针。