指针的类型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)
-这也很好。
如果是这样,我觉得f_ptr (*)(f_ptr)
不using
应该是int (*)(int) (*[variable comes here])(int (*)(int))
因为,你得到这个时候,只需要替换f_ptr
的int (*)(int)
,因为它是如此具有定义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);
}
除了使用中的*
s是可选的,所以每个人都写
int n = fp0(1);
int j = gp1(fp0)(1);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句