我有一个带有签名的根查找功能:
double root_find(double f(double), ...)
(省略号只是意味着其他一些论点与此问题无关。)
我还可以使用签名声明该函数:
double root_find(double(& f)(double), ...)
无论哪种方式,它都有效。通过第二个签名,我很清楚我通过引用传递了函数f。有了第一个签名,我不知道发生了什么。有人可以解释一下吗?
答案 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)