接收和返回函数指针的函数指针的类型?

Type of function pointer that receives and returns function pointer?

本文关键字:指针 函数 类型 返回      更新时间:2023-10-16

指向int f(int i) { return i; }的指针类型是int (*)(int)- 这很好。另外,如果我设置using f_ptr = int (*)(int),即f_ptr是指向f()的指针类型,指向f_ptr g(f_ptr fp) { return fp; }的指针类型自然是f_ptr (*)(f_ptr)- 这也很好。

如果是这样,我觉得没有usingf_ptr (*)(f_ptr)应该int (*)(int) (*[variable comes here])(int (*)(int)),因为,好吧,当你简单地用int (*)(int)替换f_ptr时,你会得到这个,因为它是用using定义的,但这实际上只会导致语法错误。实际类型是int (*(*[variable comes here])(int (*)(int)))(int)但我不明白它是如何变成这样的。

看来我的理解从根本上是错误的。任何人都可以给我一个解释或一个好的(希望不是那么深入......(资源来理解这一点吗?

摘要可能比文字更好:

int f(int i) {
return i;
}
using f_ptr = int (*)(int);
f_ptr g(f_ptr fp) {
return fp;
}
int main() {
// This makes sense.
f_ptr (*gp0)(f_ptr) = &g;
// This is correct, although I don't get it...
int (*(*gp1)(int (*)(int)))(int) = &g;
// If you simply replace `f_ptr` by `int (*)(int)` as it's so defined with `using`,
// I feel the type should become like this, which causes syntax error.
// int (*)(int) (*gp2)(int (*)(int)) = &g;
}

C++这样做是为了与C兼容

C 以这种方式执行此操作,以便定义镜像使用

int f(int i) {
return i;
}
using f_ptr = int (*)(int);
f_ptr g(f_ptr fp) {
return fp;
}
int main() {
// Definition
int (*fp0)(int) = &f;
// Use
int m = (*fp0)(1);
// Definition
int (*(*gp1)(int (*)(int)))(int) = &g;
// Use
int i = (*(*gp1)(fp0))(1);
}

除了使用中的*是可选的,所以每个人都写

int n = fp0(1);
int j = gp1(fp0)(1);