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

时间:2020-06-24 10:25:22

标签: c++ pointers function-pointers

指向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)的{​​{1}}应该是using,因为好了,只要将int (*)(int) (*[variable comes here])(int (*)(int))替换为f_ptr就可以了它是用int (*)(int)定义的,但是实际上这只会导致语法错误。实际的类型是using,但我不知道它是怎么变成这个的。

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

代码片段可能比单词更好:

int (*(*[variable comes here])(int (*)(int)))(int)

1 个答案:

答案 0 :(得分:5)

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);