假设我有一个函数:
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);
}
这两个函数是一样的吗?两者有什么区别吗?
最佳答案
规则是,在函数的参数列表中,声明为具有函数类型的参数被调整为具有指向函数类型的指针(类似地,可能更广为人知的是,声明为类型为“数组T
”调整为“指向 T
的指针”类型。允许在声明符中使用冗余括号,但会被忽略。
因此,在
void function1 (void(callback)(int), int arg);
void function2 (void (*callback)(int), int arg);
void function3 (void callback(int), int arg);
这三个函数的第一个参数具有完全相同的类型 - “指向返回 void
的 (int)
函数的指针”。
关于c++ - 回调函数 : difference between void(*func)(int) and void(func)(int),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25953542/