将函数传递给C ++中的函数

时间:2015-03-01 20:48:18

标签: c++ function pass-by-reference

我有一个带有签名的根查找功能:

double root_find(double f(double), ...)(省略号只是意味着其他一些论点与此问题无关。)

我还可以使用签名声明该函数:

double root_find(double(& f)(double), ...)

无论哪种方式,它都有效。通过第二个签名,我很清楚我通过引用传递了函数f。有了第一个签名,我不知道发生了什么。有人可以解释一下吗?

3 个答案:

答案 0 :(得分:3)

就像数组一样,函数类型在参数声明中调整为指向函数类型。因此,double root_find(double f(double))表示double root_find(double (*f)(double)) - 一个指向函数指针的函数。

函数引用和函数指针本质上是相同的,但引用和指针的语义仍然适用(引用不能重新赋值,而指针可以等)。此外,它们都可以被称为普通函数,因为在这种情况下语法明确地是一个函数调用。

答案 1 :(得分:0)

在这两种情况下,您的编译器都会将其衰减为double (*f)(double)

答案 2 :(得分:0)

我相信第一种情况是double (*)(double),第二种情况 - double (&)(double)