C++ 将函数传递给C+中的函数+;
我有一个带有签名的根查找函数:C++ 将函数传递给C+中的函数+;,c++,function,pass-by-reference,C++,Function,Pass By Reference,我有一个带有签名的根查找函数: double root_find(double(& f)(double), ...) double root\u find(double f(double),…)(省略号只是表示还有一些其他参数与此问题无关。) 我还可以用签名声明函数: double root_find(double(& f)(double), ...) 不管怎样,它都是有效的。对于第二个签名,很明显我是通过引用传递函数f。有了第一个签名,我不知道发生了什么。有人能解释一下吗?
double root_find(double(& f)(double), ...)
double root\u find(double f(double),…)
(省略号只是表示还有一些其他参数与此问题无关。)
我还可以用签名声明函数:
double root_find(double(& f)(double), ...)
不管怎样,它都是有效的。对于第二个签名,很明显我是通过引用传递函数f。有了第一个签名,我不知道发生了什么。有人能解释一下吗?在这两种情况下,编译器都会将其分解为
double(*f)(double)
我相信在第一种情况下它会是double(*)(double)
,在第二种情况下-double(&)(double)就像数组一样,函数类型会在参数声明中调整为指向函数类型的指针。因此,double root\u find(double f(double))
意味着double root\u find(double(*f)(double))
-一个指向函数的指针的函数
对函数的引用和对函数的指针本质上是相同的,但引用和指针的语义仍然适用(不能重新分配引用,而指针可以,等等)。此外,它们都可以作为普通函数调用,因为在这种情况下,语法是明确的函数调用。也许阅读std::function
文档会有用这是正确的。例如,pthreads
在输入函数时执行此操作。