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

赤井

指针的类型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_ptrint (*)(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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章