接收函数指针的类型和 returns 函数指针?
Type of function pointer that receives and returns function pointer?
指向 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)
- 这也是很好。
如果是这样,我觉得没有 using
的 f_ptr (*)(f_ptr)
应该是 int (*)(int) (*[variable comes here])(int (*)(int))
因为,好吧,当你简单地用 [=13= 替换 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);
}
除了use中的*
是可选的,所以大家都写
int n = fp0(1);
int j = gp1(fp0)(1);
指向 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)
- 这也是很好。
如果是这样,我觉得没有 using
的 f_ptr (*)(f_ptr)
应该是 int (*)(int) (*[variable comes here])(int (*)(int))
因为,好吧,当你简单地用 [=13= 替换 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);
}
除了use中的*
是可选的,所以大家都写
int n = fp0(1);
int j = gp1(fp0)(1);