Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将函数传递给C+中的函数+;_C++_Function_Pass By Reference - Fatal编程技术网

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
在输入函数时执行此操作。