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

Passing a function to a function in C++

我有一个带有签名的寻根函数:

double root_find(double f(double), ...)(省略号只是表示还有一些与此问题无关的其他论点。)

我也可以用签名声明函数:

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

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

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

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

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

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