【问题标题】:Passing a function to a function in C++将函数传递给 C++ 中的函数
【发布时间】:2015-05-02 03:51:15
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 也许阅读std::function 文档会很有用

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      就像数组一样,函数类型在参数声明中被调整为指向函数的类型。因此,double root_find(double f(double)) 的意思是 double root_find(double (*f)(double)) - 一个带有指向函数的函数。

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

      【讨论】:

      • 这是正确的。例如,pthreads 在输入函数时执行此操作。
      猜你喜欢
      • 2013-12-23
      • 2017-12-13
      • 1970-01-01
      • 2018-11-14
      • 2012-07-25
      • 2011-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多