"int f(int(fn)())"和"int f(int(*fn)())"的区别?

Difference between "int f(int(fn)())" and "int f(int(*fn)())"?

本文关键字:int fn 区别      更新时间:2023-10-16
int g()
{
    return 0;
}
int f1(int(fn)())
{
    return fn();
}
int f2(int(*fn)())
{
    return fn();
}
int main()
{
    f1(g);
    f2(g);
}

以上代码可以成功编译。

我只是想知道:

int f(int(fn)())int f(int(*fn)())的区别是什么?

为什么它们在c++中都是合法的?

int f(int(fn)())int f(int(*fn)())是一回事。函数接受函数指针作为形参。

传递函数名作为形参时,函数名自动转换为指针。所以

int f(int(fn)()) {}
int f(int(*fn)()) {}  // redefinition error