“int f(int(fn)())”和“int f(int(* fn)())”之间的区别?

时间:2016-09-03 05:27:03

标签: c++ function types standards

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 ++中都是合法的?

1 个答案:

答案 0 :(得分:4)

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

当我们将函数名称作为参数传递时,函数名称会自动转换为指针。所以

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